我不知道是否有任何功能! 請讓我知道這是可能的嗎?如何在調用時從spy.on(obj,'funcName')返回假數據?
類似的東西:
spy(obj, 'funcName').and.returnValue(5); // spy will return a fake data when 'funcName'called.
嗯,我現在用mocha
,chai-spies
我不知道是否有任何功能! 請讓我知道這是可能的嗎?如何在調用時從spy.on(obj,'funcName')返回假數據?
類似的東西:
spy(obj, 'funcName').and.returnValue(5); // spy will return a fake data when 'funcName'called.
嗯,我現在用mocha
,chai-spies
看起來他們增加了chai.spy.returns
功能做到這一點,但API似乎有點怪我。我安裝了lastest code from their master branch並做了一些遊戲。這是我試驗過:
var chai = require('chai'),
spies = require('chai-spies');
chai.use(spies);
var expect = chai.expect;
var obj = null;
describe('funcName', function() {
beforeEach(function() {
obj = {
funcName: function() {
return true;
}
}
});
// PASSES
it('returns true by default', function() {
expect(obj.funcName()).to.be.true
});
// PASSES
it('returns false after being set to a spy', function() {
var spyFunction = chai.spy.returns(false);
obj.funcName = spyFunction;
expect(obj.funcName()).to.be.false
});
// FAILS
it('returns false after being altered by a spy', function() {
chai.spy.on(obj, 'funcName').returns(false);
expect(obj.funcName()).to.be.false
});
});
輸出從運行這些測試是:
funcName
✓ returns true by default
✓ returns false after being set to a spy
1) returns false after being altered by a spy
2 passing (14ms)
1 failing
1) funcName returns false after being altered by a spy:
TypeError: Object #<Object> has no method 'returns'
at Context.<anonymous> (test.js:31:34)
所以看起來他們要你實例化一個間諜對象有一個返回值,然後更換funcName
功能obj
與它。你無法窺探一個功能並一舉設定其返回值。
此外,該功能是在October, 2015中添加的,從那時起它們還沒有發佈新版本。我的建議是爲間諜和存根使用更成熟的庫,如Sinon.js。您可以使用自己的Stub API改變一個函數的返回值:
sinon.stub(obj, 'funcName').returns(5);
末節API提供了許多更多的方式來改變函數的行爲,至今甚至會允許你有完全取代它自定義功能:
var func = function() {...}
sinon.stub(obj, 'funcName', func);
而不是一個間諜,看看用這個存根。
每文檔:
測試樁與預編程的行爲函數(間諜)。除了可用於更改存根行爲的方法外,它們還支持完整的測試間諜API。
存根有一個「返回」方法來做你正在尋找的東西。
var stub = sinon.stub();
stub.returns(54)
stub(); // 54