我正试图找到一种方法来测试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()
});
测试“处理程序”间谍在进程函数的回调中被调用(这就是我现在通常做的事情)。但是设置它会使测试变得混乱,并且为测试中的类添加代码和复杂性纯粹是为了使它可测试。
答案 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);
});