Я пытаюсь выполнить тестирование объекта мангуста, который использует обещания. Я написал тест ниже, и он работает, но он не завершен. Я не могу понять, как проверить, вызваны ли методы «then» или «catch».Единичные тесты мангуста с сиконом
Как я могу использовать шпион, чтобы проверить, вызван ли метод «then», когда я разрешаю обещание?
Метод тестирования
export function create(req, res) {
User
.createAsync(req.body)
.then(handleCreate(res, req.originalUrl))
.catch(handleError(res));
}
тест Блок
it('should do something',() => {
const req = {
body: 45,
};
const res = {};
const mockRole = sandbox.mock(Role).expects('createAsync').once().withArgs(45)
.returns(Promise.resolve());
controller.create(req, res);
});
UPDATE с решением I ИСПОЛЬЗУЕМЫХ (6 мая 2016 года)
Спасибо @ReedD за помощь в правильном направлении
Хотя это «работает», I f как я тестирую функциональность обещаний больше, чем мой код.
it('should call create with args and resolve the promise',() => {
const createSpy = sinon.spy();
const errorSpy = sinon.spy();
sandbox.stub(responses, 'responseForCreate').returns(createSpy);
sandbox.stub(responses, 'handleError').returns(errorSpy);
sandbox.mock(Role).expects('createAsync').once().withArgs(45)
.returns(Promise.resolve());
return controller.create(req, res).then(() => {
expect(createSpy.calledOnce).to.be.equal(true);
expect(errorSpy.calledOnce).to.be.equal(false);
});
});
Спасибо. Это привело меня к правильному пути решения, которое я использовал. В конце концов, я чувствую, что я всего лишь блок, тестирующий функциональность Promises: D – VtoCorleone
Правда, этот модульный тест гарантирует, что ваша функция 'create' работает правильно. Вы должны написать больше модульных тестов, чтобы независимо убедиться, что 'handleCreate' и' handleError' также работают правильно. – ReedD