如何在调用时从spy.on(obj,'funcName')返回假数据?

我不知道有没有function! 请让我知道这有可能吗?

类似的东西:

spy(obj, 'funcName').and.returnValue(5); // spy will return a fake data when 'funcName'called. 

那么我正在使用mochachai-spies

而不是间谍,看看用这个存根。

根据文档:

testing存根是具有预编程行为的function(间谍)。 除了可以用来改变存根行为的方法之外,它们还支持完整的testing间谍API。

存根有一个“回报”的方法来做你正在寻找的东西。

 var stub = sinon.stub(); stub.returns(54) stub(); // 54 

看起来他们添加了一个chai.spy.returns函数来做到这一点,但API似乎chai.spy.returns 。 我从他们的主分支安装了最新的代码,并做了一些游戏。 以下是我的尝试:

 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 }); }); 

运行这些testing的输出是:

 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) 

所以看起来他们希望你用一个返回值实例化一个间谍对象,然后用objreplaceobj上的funcName函数。 你不能窥探一个function并且一举设定它的返回值。

此外,该function于2015年10月join,从那时起 ,他们还没有发布新版本。 我的build议是使用像Sinon.js这样的更成熟的图书馆作为间谍和存根。 您可以使用他们的Stub API来更改函数的返回值:

 sinon.stub(obj, 'funcName').returns(5); 

Stub API提供了更多的方法来改变函数的行为,甚至可以让你用一个完全自定义的函数replace它:

 var func = function() {...} sinon.stub(obj, 'funcName', func);