Я пытаюсь проверить, вызывается ли res.json() в методе экспресс-получения.Тестирование методов экспресс-маршрута
Однако в моем методе get он ждет обещания перед выполнением res.json();
Вот метод управления:
function get(req, res, next) {
Service
.doImportantThings()
.then(success, error);
function success(result) {
res.json(result); // Method i want to test.
}
function error(error) {
// Handles it
}
}
Услуги:
function doImportantThings() {
var deferred = q.defer();
doStuff
.then(success, error);
function success(results) {
deferred.resolve(output);
}
function error() {
deferred.reject();
}
return deferred.promise;
}
Тест:
beforeEach(function() {
var Service = require('../../../../app/services/service');
ServiceMock = sinon.mock(Service);
methodExpect = ServiceMock.expects('doImportantThings').returns(q.resolve("test"));
res.json = sinon.spy();
expressController = require('../../../../app/controllers/v1/controller');
});
afterEach(function() {
ServiceMock.restore();
});
describe('get()', function() {
it('should call res.json() one time', function() {
expressController.get(req, res);
expect(res.json).to.have.been.calledOnce; // Fails
});
it('should call res.json() with object argument.', function() {
expressController.get(req, res)
expect(res.json).to.have.been.calledWith("test"); // Fails
});
});
Потому что я использую обещает ожидать всегда возвращает ложь. Я пытался использовать обратный вызов mocha done() без успеха. Я также попытался поместить обратный вызов в качестве параметра контроллера и сделать вызов оттуда или ожидать там, но тест либо истекает, либо не утверждается.
Все ответы, которые я нашел, говорят о том, как использовать supertest, который, вероятно, будет работать, но я хочу проверить это, не делая HTTP-запрос на ресурс, чтобы это сделать.