为什么这个Jasmine测试偶尔会在Firefox中失败

时间:2013-10-31 14:21:13

标签: javascript unit-testing firefox global-variables jasmine

编辑:我将console.log更改为alert,找到了属性:getInterface

我们进行了环境完整性测试,确保我们的代码不会引入不需要的全局变量。在运行我们的代码之前,我们创建了window对象的“副本”:

var testingWindow = {};
for (var x in window) {
    if (window.hasOwnProperty(x)) {
        testingWindow[x] = true;
    }
}

然后在运行我们的代码后,我们运行此测试:

describe('After the program has run', function() {
    it('no new global variables have been introduced', function() {
        for (var x in window) {
            if (window.hasOwnProperty(x)) {
                if (!testingWindow[x]) {
                    console.log(x);
                }
                expect(testingWindow[x]).not.toBe(undefined);
                expect(window.hasOwnProperty(x)).toBe(true);
            }
        }
    });
});

此测试通过除Firefox以外的所有浏览器。更奇怪的是,我从未见过测试因console打开而失败,所以任何“看到”错误的尝试都是徒劳的。任何帮助表示赞赏。

提前致谢。

1 个答案:

答案 0 :(得分:2)

这似乎是一个Firefox错误:https://github.com/visionmedia/mocha/issues/380

当我在expect s周围包装此条件时,它们总是通过:

if (x !== 'getInterface') ...

看起来Firefox最初没有定义getInterface,之后就会这样做。 console打开后会在开头定义。