Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么Jasmine在监视$.ajax时不重置间谍?_Javascript_Ajax_Typescript_Jasmine_Spy - Fatal编程技术网

Javascript 为什么Jasmine在监视$.ajax时不重置间谍?

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("

我试图在Jasmine 2.0测试中监视
$.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”块重新评估的