在QUnit设置中定义测试变量

时间:2014-06-20 05:24:22

标签: javascript scope qunit

我意识到QUnit.module提供了围绕每个测试的设置和拆除回调。

QUnit.module("unrelated test", {
    setup: function() {
        var usedAcrossTests = "hello";
    }
});
QUnit.test("some test", function(assert) {
    assert.deepEqual(usedAcrossTests, "hello", "uh oh");
});
QUnit.test("another test", function(assert) {
    assert.deepEqual(usedAcrossTests.length, 5, "uh oh");
});

setup所示,我想声明一个变量,以便在以下QUnit.test中使用。但是,由于变量只有函数作用域,因此两个测试失败,说usedAcrossTests is undefined

我可以删除var声明,但那会污染全局范围。特别是如果我有多个模块,我宁愿不将特定于测试的变量声明为全局变量。

有没有办法在setup中指定要在模块内的测试中使用的变量,而不会污染全局范围?

1 个答案:

答案 0 :(得分:16)

我刚才意识到它比我以前的答案更简单。 只需在当前对象的所有其他模块测试中添加要访问的所有属性。

QUnit.module("unrelated test", {
    setup: function() {
        this.usedAcrossTests = "hello"; // add it to current context 'this'
    }
});

然后在每个你希望使用它的测试中。

QUnit.test("some test", function(assert) {
    assert.deepEqual(this.usedAcrossTests, "hello", "uh oh");
});

希望这有帮助