断言已使用正确的范围传递回调

时间:2014-02-04 17:52:22

标签: javascript jasmine

我正试图找到一种方法来测试ObjectA是否正确设置了从ObjectB到ObjectC的回调。

e.g。

// In class (has scope issue)
this._processor.process('stuff', this._handler.handle); 

// In test
expect(processor.process).toHaveBeenCalledWith('stuff', handler.handle);

我去测试的是实际发生以下调用:

this._processor.process('stuff', this._handler.handle.bind(this._handler)); 

我知道我可以通过像这样处理回调来解决这个问题:

this._processor.process('stuff', function() {
    this._handler.handle()
}); 

测试“处理程序”间谍在进程函数的回调中被调用(这就是我现在通常做的事情)。但是设置它会使测试变得混乱,并且为测试中的类添加代码和复杂性纯粹是为了使它可测试。

1 个答案:

答案 0 :(得分:1)

一般来说,对间谍的每次调用都跟踪object属性中的范围(假设Jasmine 1.3):

it("has the right scope", function () {
    var scopeObj = {foo: "bar"};
    var spy = jasmine.createSpy("scope");

    spy.call(scopeObj, 42, "blue");

    // Also can use spy.calls[0].object
    expect(spy.mostRecentCall.object).toBe(scopeObj);
});