Javascript 为什么Jasmine在监视$.ajax时不重置间谍?
我试图在Jasmine 2.0测试中监视Javascript 为什么Jasmine在监视$.ajax时不重置间谍?,javascript,ajax,typescript,jasmine,spy,Javascript,Ajax,Typescript,Jasmine,Spy,我试图在Jasmine 2.0测试中监视$.ajax。下面是一个简单的示例(TypeScript),显示了我的场景: describe("first test", () => { var deferred = jQuery.Deferred(); spyOn($, "ajax").and.callFake((uri: string, settings: JQueryAjaxSettings) => { return deferred.resolve("
$.ajax
。下面是一个简单的示例(TypeScript),显示了我的场景:
describe("first test", () => {
var deferred = jQuery.Deferred();
spyOn($, "ajax").and.callFake((uri: string, settings: JQueryAjaxSettings) => {
return deferred.resolve("ThisIsADummyResult");
});
it("should return dummy result", done => {
$.ajax("http://somedummyserver.net").then(result => {
expect(result).toBe("ThisIsADummyResult");
done();
});
});
});
describe("second test", () => {
var deferred = jQuery.Deferred();
spyOn($, "ajax").and.callFake((uri: string, settings: JQueryAjaxSettings) => {
return deferred.resolve("ThisIsAnotherResult");
});
it("should return another result", done => {
$.ajax("http://somedummyserver.net").then(result => {
expect(result).toBe("ThisIsAnotherResult");
done();
});
});
});
firstTest
以及secondtest
如果我单独运行它们,它们都可以工作。但是,如果我像上面所示运行这两个测试,我会得到以下错误消息:ajax已经被监视了
因此,我的问题是:
- 每次测试后,Jasmine不应该自动重置间谍吗?为什么对我来说不起作用
- 还有没有另一种方法可以让Jasmine重置间谍
- 如何手动重置间谍
更新:我继续试验,自己找到了一个可能的解决方案。如果我在it
规范中设置了间谍,那么两个测试都可以正常运行。下面是第一次测试的代码,显示了我的意思:
describe("first test", () => {
it("should return dummy result", done => {
var deferred = jQuery.Deferred();
spyOn($, "ajax").and.callFake((uri: string, settings: JQueryAjaxSettings) => {
return deferred.resolve("ThisIsADummyResult");
});
$.ajax("http://somedummyserver.net").then(result => {
expect(result).toBe("ThisIsADummyResult");
done();
});
});
});
不过,为什么第一个版本不起作用还是很有趣的。为什么Jasmine在第一个版本中没有重置间谍,而在第二个版本中没有重置间谍?对于在所有测试中使用的东西,但每次测试使用“之前”都需要重置间谍:
茉莉花不会神奇地知道你身体的哪一行是你想要为每个“it”块重新评估的