Я хочу издеваться над вызовом базы данных, который возвращает обещание. И затем я хочу проверить, вызвана ли она точными аргументами или нет.Как издеваться над функцией, которая возвращает обещание и проверяет его точными аргументами
func(data) {
let formattedData = formatData(data);
return DbClient.saveData(formattedData).then(() => {
return { "ok": true }
}).catch(() => {
return { "ok": false }
});
}
и мой тестовый случай
it("", (done) => {
let dbMock = sinon.mock(DbClient).expects("saveData");
dbMock.returns(Promise.resolve({ "ok": true }));
dbMock.withExactArgs(formattedData);
func(data).then(resp => {
try{
dbMock.verify();
expect(resp).to.deep.equal({ "ok": true });
done();
} catch(err) {
done(err);
}
})
});
обещание не решает, когда я использую dbMock.withExactArgs(formattedData)
Если я дам правильный formattedData
то становится прошло, когда я пытался провалить тест с некоторыми другими аргументами вместо formattedData
обещание не разрешается, поэтому я получаю эту ошибку:
Error: timeout of 3000ms exceeded. Ensure the done() callback is being called in this test.
** Когда я удаляю dbMock.withExactArgs(formattedData)
, мой тест проходит, поскольку макет разрешает обещание.
Фактически мой func возвращает обещание, которое я забыл упомянуть в коде [обновлено сейчас]. Но все же у меня такая же проблема, она ждет обещания разрешить или отклонить, как упоминалось в вопросе. –