4

我有以下规格。

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");
    });

 });

exitHistory.getLastExitLink内部使用SN.Utils.

测试完成后,Jasmine 不会删除间谍对象 utils。在下一个测试套件中,我也可以看到相同的实用程序。每次测试完成后有没有办法重置间谍对象?

如果我为 utils 创建一个新对象,而不是创建间谍,行为是相同的。那么在这种情况下,间谍和实际对象之间有什么区别。

如果我错了,请纠正我。

4

2 回答 2

6

前段时间我遇到了同样的问题,经过几天的努力,我找到了解决方案。如果您使用其他方式重置间谍,请尝试使用

spyOn(SN, 'Utils');

此处描述了间谍: https ://github.com/pivotal/jasmine/wiki/Spies

于 2012-08-10T09:02:56.557 回答
0

在规格块内的块内使用spyOn和声明您的间谍,当每个规格被拆除时,间谍将被清除。beforedescribe

aSpec.js

describe('something', () => {
    beforeAll(() => spyOn(someObject, 'someMethod').and.returnValue('foo'));
    it('is spied on', () => {
       expect(someObject.someMethod()).toEqual('foo');
    });
});

另一个Spec.js

describe('something else', () => {
    beforeAll(() => spyOn(someObject, 'someMethod').and.returnValue('bar'));
    it('is spied on', () => {
       expect(someObject.someMethod()).toEqual('bar');
    });
});
于 2020-12-16T18:08:52.187 回答