Eğer bu basit bir soru ise özür dilerim, Node ve Sinon için nispeten yeniyim. Nodejs'de yuvalanmış asenkron bir işlevin çağrıldığını anlamaya çalışmak için uğraşıyorum.Sinon - iç içe geçmiş işlevi nasıl yönlendirilir?
Ben mocha, chai, sinon ve istek (https://github.com/request/request) kullanıyorum ama sanırım saplama parçası üzerinde temel bir şey eksik düşünüyorum. my_app.js içinde
Örnek - testi içinde
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();
. Geri dönmek için istekte bulunmaya ve bazı sahte veriler sağlamaya çalışıyorum. Ama on line "istek tanımlanmadı" bir hata almaya devam "saplama oluşturarak ediyorum.
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();
});
});
});
ben sinon.stub (objname, atayabilirsiniz biliyorum 'funcname') ya da sinon.stub ("funcname"), ancak sadece dış nesneyi ayarlıyorum, getTicker işlevinin içindeki işlev isteğini saplamaya çalışıyorum.
Bunu nasıl yapacağınıza dair herhangi bir fikir var mı? Belki de bir casus kullanmalıyım (ama nasıl?) Veya yukarıdaki getTicker işlevini sınamak için daha iyi bir yaklaşım var mı?
Tamam, bu yöntemde get yöntemini kullanmayı düşünmedim. Şimdi de geri arama çağrıldığını doğrulamak için bir casus kullanabilirim. –
Ahh yup Geri aramanın çağrıldığını doğrulayabilirim. ama biraz farklı bir sözdizimi kullanıyorum mymodule.getTicker (geri arama); 'request.get.should.have.been.called;' ve request.get.should.have.been.called; 'teşekkürler ton ! –