2015-09-02 4 views
0

У меня проблемы с получением синусового заглушки, чтобы вернуть/разрешить другую заглушку синуса. Я пользуюсь синонами, чаями, чаи-обещаниями и моккой.Возвращение синусового шлейфа из синусового шлейфа

Я выполняю ряд асинхронных задач в последовательности и код, который я хочу, чтобы проверить выглядеть примерно так:

Terminal.findOneAsync({terminalId: terminalId}).then(function(terminal) { 
    terminal.lastSeen = timestamp; 
    return terminal.saveit(); 
}).then(function(terminal) { 
//continue to do other stuff 
}); 

И мою попытку создания заглушек для этого выглядеть следующим образом:

var saveitStub = sinon.stub(Terminal.prototype, 'saveit'); 
saveitStub.resolves(terminalUpdated); 
var findOneStub = sinon.stub(Terminal, 'findOneAsync'); 
findOneStub.resolves(saveitStub); 

Метод «saveit» находится в Terminal.prototype, поэтому мне нужно его заглушить. При попытке запуска этого я получаю ошибку:

Unhandled rejection TypeError: undefined is not a function 

на линии:

return terminal.saveit(); 

Но если сбросить терминальный объект в консоли выглядит хорошо, как и любой другой заглушка объект (по крайней мере, до моего простого ума). Описанный метод saveit() можно назвать «автономным» в тесте. Но всякий раз, когда я возвращаю его с помощью методов «возвращения» или возврата chai-as-обещанного, я получаю эту ошибку.

Любая идея, почему это так?

ответ

0

Эта линия:

findOneStub.resolves(saveitStub) 

вызывает Terminal.findOneAsync вернуть функцию заглушки, а не экземпляр терминала. Очевидно, что заглушка не имеет свойства, называемого saveit, хотя Terminal.prototype делает. Поскольку неизвестные свойства возвращаются как undefined, это заканчивается тем, что вы пытаетесь вызвать undefined как функцию.

Чтобы сделать такой тест, вам, вероятно, лучше построить экземпляр Terminal и укусить его метод saveit. Если по какой-либо причине создание экземпляра слишком сложно, вы можете использовать sinon.createStubInstance. Так как я не знаю подпись вашего конструктора, я сделаю это в качестве примера:

var terminal = sinon.createStubInstance(Terminal); 
var saveitStub = terminal.saveit 
saveitstub.resolves(terminalUpdated) 
var findOneStub = sinon.stub(Terminal, 'findOneAsync') 
findOneStub.resolves(terminal); 
Смежные вопросы