我正在尝试在jasmine(版本1.3)中编写一些高级测试,我在$.getJSON()
方法上设置间谍。这是在beforeEach
块中设置的:
describe 'the Controller', ->
beforeEach ->
Fixtures.createTestData()
jqXHR = Fixtures.jqXHR
section = new section({el:appDom})
response = Fixtures.createSectionsSearchResponse()
spyOn($, 'getJSON').andCallFake( ->
jqXHR.resolve(response)
)
然后我像往常一样浏览搜索查询(效果很好)。
在我后来的一个测试中,我有第二个API被ping。我想更改正在发送的响应,但似乎无法正常工作。 This Blog似乎意味着我可以只使用不同的andCallFake()
重用间谍,但它似乎不起作用。我得到了原始的响应对象,而不是我重写的方法
$.getJSON.andCallFake( ->
jqXHR.resolve({"count":4})
)
关于如何重用或销毁原始间谍方法的任何想法?
答案 0 :(得分:2)
您可以重置间谍。
it("can be reset", function() {
foo.setBar(123);
foo.setBar(456, "baz");
expect(foo.setBar.calls.any()).toBe(true);
foo.setBar.calls.reset();
expect(foo.setBar.calls.any()).toBe(false);
});
答案 1 :(得分:2)
Jasmine 2.0 documentation描述了reset()方法,但Jasmine 1.3 documentation没有提到它。
对于Jasmine 1.3,我相信您正在寻找的是
foo.setBar.reset();
翻译成1.3语法的Jasmine 2.0文档的等效部分如下:
it("can be reset", function() {
foo.setBar(123);
foo.setBar(456, "baz");
expect(foo.setBar).toHaveBeenCalled();
foo.setBar.reset();
expect(foo.setBar).not.toHaveBeenCalled();
});