公开功能进行测试

时间:2015-09-29 16:08:30

标签: javascript selenium-webdriver automated-tests mocha yiewd

我通过命令行使用mocha来测试Web应用程序。有一个功能仅用于辅助单元测试,仅暴露于单元测试。这就是如何实现的:

function inUnitTest() {
    return typeof window.QUnit === 'object';
}

var messagesModel = (function(){
    //functions

    var exports = {
    //exported functions
    };

    if(inUnitTest()){
        exports = $.extend({}, exports,
            {
                reset:function(){
                    messages = [];
                }
            }
        );
    }

    return exports;
}());

我正在使用Qunit进行单元测试,因此在测试窗口期间.Qunit是一个对象,因此inUnitTest()返回true并且显示重置函数。

我一直试图为我的自动摩卡测试做类似的事情。我正在使用包装Selenium webdriver的yiewd。 Webdriver有一个允许你执行任意javascript的功能。这就是我正在执行的内容:

yield driver.execute('window.automatedTesting = true');

在应用程序代码中我有:

    function inAutomatedTest() {
        if(typeof window.automatedTesting === 'boolean' && window.automatedTesting) {
            return true;
        }
        return false;
    }

var messagesModel = (function(){
   //functions and exports
    if(inAutomatedTest()){
        exports = $.extend({}, exports,
            {
                reset:function(){
                    messages = [];
                }
            }
        );
    }
    return exports;
}());

我从命令行运行npm test,该命令行运行package.json中的测试脚本。我的package.json是:

    {
  "devDependencies": {
    "chai": "^2.3.0",
    "chai-colors": "^1.0.0",
    "yiewd": "^0.6.0"
  },
  "scripts": {
    "test": "mocha --harmony --timeout 0 tests/*/*.js"
  }
}

即。我在mocha测试中设置window.automatedTesting = true并在我的应用程序代码中检查:

describe("Test case", function() {
before(function(done) {
    //set up code
});
describe("Given .....", function() {
    it("Then ....", function(done) {
        driver.run(function*() {
            yield driver.execute('window.automatedTesting = true');
            //the next function relies on messagesModel.reset() being called
            yield setMessagesAsZeroMessages();
            done();
        });
    });
});
});

但是,这不起作用 - inAutomatedTest()始终返回false,因此messagesModel.reset未公开且无法调用。

好像mocha上下文中的window对象与应用程序代码的window对象不同。

我做错了什么吗?有没有不同的,但仍然很简单的方法?

0 个答案:

没有答案