Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.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不会在每个测试规范之后重置spy_Javascript_Unit Testing_Testing_Junit_Jasmine - Fatal编程技术网

Javascript Jasmine不会在每个测试规范之后重置spy

Javascript Jasmine不会在每个测试规范之后重置spy,javascript,unit-testing,testing,junit,jasmine,Javascript,Unit Testing,Testing,Junit,Jasmine,我有以下规格 describe("SN.ExitHistory", function() { var exitHistory; beforeEach(function() { SN.Utils = jasmine.createSpy("utils").andCallFake(function() { function readSNCookie(cookieName, key) { return "google.com";

我有以下规格

describe("SN.ExitHistory", function() {

    var exitHistory;

    beforeEach(function() {

    SN.Utils = jasmine.createSpy("utils").andCallFake(function() {
        function readSNCookie(cookieName, key) {
            return "google.com";
        }

        function isUndefinedOrNull(param) {
            return (param == null) || (param === "null");
        }

        function createSNCookie(snCookieName, key, value, lifeTime) {

        }

        var me = {
            readSNCookie : readSNCookie,
            isUndefinedOrNull : isUndefinedOrNull,
            createSNCookie : createSNCookie
        };
        return me;

    })();

    exitHistory = SN.ExitHistory();

    });

    it("return last exit link", function() {
        expect(exitHistory.getLastExitLink()).toEqual("google.com");
    });

 });
exitistory.getLastExitLink
内部使用
SN.Utils

测试完成后,Jasmine不会删除间谍对象UTIL。在下一个测试套件中,我还可以看到相同的UTIL。每次测试完成后,有没有办法重置spy对象

如果我为UTIL创建一个新对象,而不是创建spy,行为是相同的。那么在这个场景中,间谍和实际对象之间有什么区别呢


如果我错了,请纠正我

不久前我也遇到了同样的问题,经过几天的努力,我找到了解决办法。如果你使用另一种方式,你的间谍将被重置,因此请尝试使用

spyOn(SN, 'Utils');
这里描述了间谍:

使用
间谍
并在
描述
规范块中的
块之前在
中声明你的间谍,当每个规范被拆除时,间谍将被清理干净

aSpec.js

描述('something',()=>{ beforeAll(()=>spyOn(someObject,'someMethod')。和.returnValue('foo'); 它('被监视',()=>{ expect(someObject.someMethod()).toEqual('foo'); }); });
另一个spec.js

description('something',()=>{
beforeAll(()=>spyOn(someObject,'someMethod')。和.returnValue('bar');
它('被监视',()=>{
expect(someObject.someMethod()).toEqual('bar');
});
});

createSpy
现在已被弃用,并且在
createSpy
定义之前的源代码中有一条注释,您不应该使用此内部方法。而且这个答案是正确的,顺便说一句,它将解决作者的问题a,对不起,它是
jasmine.Spy()
不允许调用:>注意:不要直接调用
新jasmine.Spy()
间谍-间谍必须使用
spyOn
jasmine.createSpy
jasmine.createSpyObj
创建,无论如何,
spyOn
是作者需要的东西
createSpy
仅适用于间谍功能,而不适用于对象绑定方法。这不适用于Jasmine 1.0.3(就我所知,1.3的源代码也适用于1.3):对于我当前基于1.0.3的测试套件,它说“已经被间谍发现”。我正在使用
重置间谍。wascall=false
在测试进一步的期望时。@shaman.sir我不知道您在哪里发现
createSpy
被弃用的信息-它的用途与
spyOn
略有不同,在1.3.1评论中没有这样说