![](/img/trans.png)
[英]How to stub constant functions when using ES Modules with sinon.js?
[英]How to stub chained functions using sinon.js
為了編寫我的測試,我在堆棧中使用mocha框架, Chai作為斷言庫, Sinon.JS用於模擬 ,存根和間諜。 假設我有一些鏈式函數,例如:
request
.get(url)
.on('error', (error) => {
console.log(error);
})
.on('response', (res) => {
console.log(res);
})
.pipe(fs.createWriteStream('log.txt'));
考慮到我想用必要的參數斷言他們的調用,最好的方法是什么?
這樣的結構:
requestStub = {
get: function() {
return this;
},
on: function() {
return this;
}
//...
};
不允許我斷言這些方法,如:
expect(requestStub.get).to.be.called;
expect(requestStub.on).to.be.calledWith('a', 'b');
stub的returns()
方法的用法:
requestStub = {
get: sinon.stub().returns(this),
on: sinon.stub().returns(this),
};
不會返回該對象,並導致錯誤:
TypeError:無法調用未定義的方法'on'
請告訴我,我怎樣才能存根鏈接功能?
第一種方法對於存儲您的請求對象是正確的,但是,如果您想測試方法是否被調用和/或檢查調用它們時使用了哪些參數,也許您將更容易使用間諜。 這是關於如何使用它們的sinon-chai文檔
'use strict';
var proxyquire = require('proxyquire').noPreserveCache();
var chai = require('chai');
// Load Chai assertions
var expect = chai.expect;
var assert = chai.assert;
chai.should();
var sinon = require('sinon');
chai.use(require('sinon-chai'));
var routerStub = {
get: function() {
return this;
},
on: function() {
return this;
}
}
var routerGetSpy;
var configStub={
API:"http://test:9000"
}
var helperStub={
}
var reqStub = {
url:"/languages",
pipe: function(){
return resStub
}
}
var resStub={
pipe: sinon.spy()
}
// require the index with our stubbed out modules
var Service = proxyquire('../../../src/gamehub/index', {
'request': routerStub,
'../config': configStub,
'../utils/helper': helperStub
});
describe('XXXX Servie API Router:', function() {
describe('GET /api/yy/* will make request to yy service defined in config as "<service host>/api/* "' , function() {
it('should verify that posts routes to post.controller.allPosts', function() {
var get = sinon.spy(routerStub, 'get')
Service(reqStub);
expect(get.withArgs("http://test:9000/api/languages")).to.have.been.calledOnce;
});
});
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.