Так что у меня есть файл, user-database
, который выглядит примерно так:Sinon гася вспомогательный метод определен в том же файле
export function foo(id: number): Promise<boolean> {
return new Promise<boolean>((resolve, reject) => {
findSomething(id)
.then((data) => {
//do something with data
})
}
}
export function findSomething(id: number): Promise<Object> {
return new Promise<Object> ((resolve, reject) => {
let query = 'SELECT * FROM user';
db.executeQuery(query);
.then(data) => {
if(data.length < 1) { reject(new Error('whoops')); }
resolve(data);
}, (err) => {
reject(err);
})
})
}
Так что я пишу модульных тестов с использованием Sinon для внешней функции, foo
, и поэтому я хотите заглушить вызываемую им функцию, findSomething
. Я делаю это следующим образом:
import * as user_db from '../../src/user-database';
describe('POST /someEndpoint',() => {
describe('when successful',() => {
let stub;
beforeEach(function() {
stub = sinon.stub(user_db, 'findSomething');
});
afterEach(function() {
stub.restore();
});
it('should respond with 200', function(done) {
stub.returns(anObjectIPredefine);
request(server)
.post(basePath)
.send(aPayloadIPredefine)
.expect(200, done);
});
}
}
Когда я запускаю тест, я не вижу объект я говорю окурок, чтобы вернуться с этим stub.returns(anObjectIPredefine)
. Вместо этого у меня фактически есть функция findSomething
выполнить как обычно и захватить данные с дБ. Есть ли что-то очевидное, что я делаю неправильно? Мое единственное предположение состоит в том, что stub = sinon.stub(user_db, 'findSomething')
не является надлежащим синтаксисом для обнуления функции, определенной в той же области, что и проверяемая функция. Я не могу найти альтернативный синтаксис.
Я попробовал это после вашего предложения. Изменено все мои 'stub.return()' на 'stub.resolves()'. Также, конечно, библиотека включала библиотеку синонов. То же самое происходит, на самом деле не похоже на то, что оно должно быть укусом и вместо этого на самом деле вызывает реальный метод. – TovrikTheThird