Przepraszam, jeśli to proste pytanie, jestem względnie nowy w Node i Sinon. Staram się dowiedzieć, jak twierdzić, że zagnieżdżona funkcja asynchroniczna została wywołana w Nodejs.Sinon - jak zagnieżdżać funkcję zagnieżdżoną?
Używam mocha, chai, sinon i prośba (https://github.com/request/request), ale myślę, że brakuje mi czegoś podstawowego w tej części.
przykład wewnątrz my_app.js -
var request = require('request');
function MyModule() {
};
MyModule.prototype.getTicker = function(callback) {
request('http://example.com/api/ticker', function(error, response) {
if (error) {
callback(error);
} else {
callback(null, response);
}
});
};
exports.mymodule = new MyModule();
Wewnątrz testu. Próbuję zablokować wywołanie, aby poprosić o podanie fałszywych danych i zwrócić je. Ale wciąż otrzymuję błąd „wniosek nie został zdefiniowany” na linii, gdzie "m tworzenie niedopałek.
var myApp = require('../my_app.js')
,assert = require("assert")
,chai = require('chai')
,sinon = require('sinon')
,expect = chai.expect;
describe('mymodule object', function() {
var mymodule = myApp.mymodule;
before(function(done) {
sinon.stub(request).yields(null, JSON.stringify({
price: '100 USD'
}));
done();
});
it('getTicker function should call request on example ticker', function(done) {
mymodule.getTicker(function(error, result){
request.called.should.be.equal(true);
done();
});
});
});
wiem, że mogę przypisać sinon.stub (objname«funcname») lub (sinon.stub "funcname"), ale te ustawiają tylko zewnętrzny obiekt, próbuję odgasić żądanie funkcji, które jest w funkcji getTicker.
Jakieś pomysły na to, jak to zrobić? Może potrzebuję użyć również szpiega (ale jak?) Czy istnieje lepsze podejście do testowania powyższej funkcji getTicker?
Ok, niesamowite, nie myślałem, aby skorzystać z metody get na tym. Teraz mogę również użyć szpiega do sprawdzenia, czy wywołanie zwrotne zostało wywołane, jak sądzę. –
Ahh tak, mogę sprawdzić, czy wywołanie zwrotne zostało wywołane. ale używam trochę innej składni 'mymodule.getTicker (callback);' 'request.get.should.have.been.called;' oraz 'request.get.should.have.been.called;' Thanks a ton ! –