我们可以定义以下测试:
spyOn(x, 'funk').andReturn(true);
如果我们想要定义:
spyOn(x, 'funk').andReturn(false);
我们会收到错误消息,说funk
已经被监视过了。
我们怎样才能有效unspy
以便可以使用新的返回值重新启用?
答案 0 :(得分:5)
你可以重新训练间谍:
//--- CODE --------------------------
x = {
funk: function() {
return 1;
}
}
// --- SPECS -------------------------
describe('test x', function () {
it("trains spies", function () {
spyOn(x, 'funk');
x.funk.andReturn('a');
expect(x.funk()).toBe('a');
x.funk.andCallThrough();
expect(x.funk()).toBe(1);
});
});
请参阅此处的小提琴 - http://jsfiddle.net/eitanp461/88kvnzx3/
答案 1 :(得分:1)
是的,可以解开。
由于间谍只是一个替代你想要监视的任何功能的函数,你可以用另一个函数再次替换它。
这样做的两种合理方法如下 - 首先,只需添加一个空函数,Jasmine将拥有新间谍所需的一切:
x.funk = function() {}
或者,如果原始功能的功能很重要,只需将其存储在如下值中:
var tempFunk = x.funk
/* do stuff */
x.funk = tempFunk