【问题标题】:Jasmine does not reset spy after each test specJasmine 不会在每个测试规范后重置间谍
【发布时间】:2012-08-10 08:35:22
【问题描述】:

我有以下规格。

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。在下一个测试套件中,我也可以看到相同的实用程序。每次测试完成后有没有办法重置 spy 对象?

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

如果我错了,请纠正我。

【问题讨论】:

    标签: javascript unit-testing testing junit jasmine


    【解决方案1】:

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

    spyOn(SN, 'Utils');
    

    这里描述了间谍: https://github.com/pivotal/jasmine/wiki/Spies

    【讨论】:

    • createSpy 现已弃用,createSpy 定义之前的源中有一条注释,您不应使用此内部方法。
    • 这个答案是对的,顺便说一句,它会解决作者的问题
    • 啊,对不起,是jasmine.Spy(),不允许调用: > 注意:不要不要直接调用new jasmine.Spy() - 必须使用@创建间谍无论如何,987654327@、jasmine.createSpyjasmine.createSpyObjspyOn 是作者需要的东西。 createSpy 仅适用于间谍功能,不适用于对象绑定方法。
    • 这不适用于 Jasmine 1.0.3(据我所知,从 1.3 的源代码和 1.3 也可以看出):对于我当前基于 1.0.3 的测试套件,它显示“ 已经被监视”。在测试进一步的期望时,我正在使用 <OBJECT>.<METHOD>.wasCalled = false; 重置间谍。
    • @shaman.sir 我不知道你在哪里找到了 createSpy 已弃用的信息 - 它的用途与 spyOn 略有不同,并且在 1.3.1 cmets 中没有这样说
    【解决方案2】:

    使用spyOn 并在describe 规范块内的before 块内声明您的间谍,当每个规范被拆除时,间谍将被清除。

    aSpec.js

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

    anotherSpec.js

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

    【讨论】:

      猜你喜欢
      • 2012-04-14
      • 2015-01-30
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      • 2012-05-04
      • 1970-01-01
      • 1970-01-01
      • 2017-09-26
      相关资源
      最近更新 更多