Я пишу тесты контроллера для приложения Node Express.
Контроллер создает экземпляр класса модели, а затем вызывает один из его методов, который возвращает разрешенное обещание. Мне нужно заглушить конструктор класса, а затем метод, чтобы он возвращал обещание, разрешенное с помощью тестовых данных.
контроллер:
const Model = require('../../models/model');
module.exports = function (req, res, next) {
const instance = new Model(req.body);
instance.method()
.then(result => {
// do something with result
})
.catch(err => next(err));
};
Контрольная работа:
const proxyquire = require('proxyquire');
const sinon = require('sinon');
require('sinon-as-promised');
const Model = require('../../../../server/models/model');
const stubs = {
model: sinon.stub(Model.prototype, 'method', function () { sinon.stub().resolves('foobar') })
};
const subject = proxyquire('../../../../server/controllers/models/method', {
'../../models/model': stubs.model
});
Sinon.JS Документация Stub API говорит:
var stub = sinon.stub(object, "method", func);
Заменяет object.method на func, завернутый в шпион.
Но я получаю эту ошибку, когда тестовый код попадает .then
в контроллер:
instance.method (...), то это не функция
Вызов .resolves()
(из sinon-as-promised
) непосредственно на заглушке дает then/catch/finally
методы экземпляру класса, а не методу экземпляра класса, как требуется:
sinon.stub(Model.prototype, 'method').resolves('foobar')
Заранее благодарим за помощь!
node.js,express,sinon,es6-promise,