如何在调用时从spy.on(obj,'funcName')返回假数据?
我不知道有没有function! 请让我知道这有可能吗?
类似的东西:
spy(obj, 'funcName').and.returnValue(5); // spy will return a fake data when 'funcName'called.
那么我正在使用mocha
, chai-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)
所以看起来他们希望你用一个返回值实例化一个间谍对象,然后用obj
replaceobj
上的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);