茉莉花1.3 - 可以解开吗?

时间:2015-09-18 14:05:16

标签: jasmine

我们可以定义以下测试:

spyOn(x, 'funk').andReturn(true);

如果我们想要定义:

spyOn(x, 'funk').andReturn(false);

我们会收到错误消息,说funk已经被监视过了。

我们怎样才能有效unspy以便可以使用新的返回值重新启用?

2 个答案:

答案 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