如何使用qUnit的设置方法创建可用于模块内所有测试的对象/变量?

时间:2016-12-29 03:25:37

标签: jquery unit-testing testing qunit

我有一个对象和一些当前在我编写的每个单独测试中声明的变量(根本不是DRY)。我想要做的是在模块的设置方法中创建这个对象和变量,以便所有测试都可以访问对象和变量。

这就是我目前的尝试方式:

QUnit.module("Main Function Test", {

        setup: function() {

            this.controls = {
                    validCharacters : /^[0-9a-zA-Z]+$/
                    ,
                    searchResultTable : {
                        setVisible : setVisible
                    },
                    commentBoxContainer: {
                        setVisible : setVisible
                    }  
                };  

            var getValue = sinon.stub().returns(false);
            var setEnabled = sinon.spy();
       },
    });

QUnit.test("someTest that should have access to the above 'controls' object and variables" ...

当我运行测试时,它们会失败,因为控件对象未定义或无法找到变量(getValue或setEnabled)。

有人可以分享我做错了什么吗?或者使对象和变量可用于相应模块中的所有测试的正确方法?

1 个答案:

答案 0 :(得分:0)

我非常确定使用QUnit,您只需要在模块设置功能之外声明该数据变量,以便在测试中访问它...

// IIFE to contain variables in scope of this file...
(function() {

  // variables to use across tests
  var controls;
  var getValue;
  var setEnabled;

  QUnit.module("Main Function Test", {
    setup: function() {

      // assign the controls value (declared above)
      controls = {
        validCharacters : /^[0-9a-zA-Z]+$/,
        searchResultTable : {
          setVisible : setVisible
        },
        commentBoxContainer: {
          setVisible : setVisible
        }
      };

      getValue = sinon.stub().returns(false);
      setEnabled = sinon.spy();
    }
  });

  QUnit.test("someTest" ...);

  QUnit.test("someOtherTest" ...);

})();