【问题标题】:Javascript - Intern - Windows is not definedJavascript - 实习生 - 未定义 Windows
【发布时间】:2015-10-05 20:10:53
【问题描述】:

我正在使用以下代码运行我的实习生测试

node node_modules/intern/runner.js config=tests/intern

在我的本地机器上。该应用程序正在使用 Dojo。 基本上我试图覆盖 window.alert 函数,因为我的一项测试由于意外警报而失败。

window.alert = function(msg) {
    //override alert function
    //...
}

我尝试将其放入我的实习生测试并得到错误。经过一番搜索,我了解到 window 对象在节点环境中不可用。我在哪里可以覆盖警报? intern file 看起来像

define(['intern/lib/args'], function(args) {
    var DEFAULT_PORT = "8080";

    var urlInfo = {
        PORT: args.port || DEFAULT_PORT,
        BASE_URL : "http://localhost:".concat(args.port || DEFAULT_PORT, "/webtest"),
    };

    var config = {
        proxyPort: 9000,

        proxyUrl: 'http://localhost:9000',

        capabilities: {
            'selenium-version': '2.45.0',
        },

        ...
        ...
    };

    return config;
});

实习生测试文件示例

define([
    'intern!object',
    'intern/chai!assert',
    'intern/dojo/node!leadfoot/helpers/pollUntil',
    'intern',
    'intern/dojo/node!fs'
], function(registerSuite, assert, Pages, intern, fs) {

    registerSuite ({
        name: 'Tests',

        setup: function() {
            window.alert = function(msg){
                console.log("Unexpected Alert: "+msg);
            }
            return this.remote.get(require.toUrl( intern.config.functionalInfo.BASE_URL)).maximizeWindow();
        },

        beforeEach: function() {
            return    
        },

        afterEach: function() {
            return 
        },

        'Test1' : function() {
             this.timeout = 600000;
            return this.remote
              .setFindTimeout(5000)
              ....
           },
}

【问题讨论】:

    标签: javascript node.js dojo javascript-objects intern


    【解决方案1】:

    window 在 node 中不存在,您必须从在浏览器上运行的代码(正在测试的代码)覆盖它的 alert,而不是在 node 本身上。我会在使用它的每个测试的设置代码中执行此操作。

    【讨论】:

    • 当您说在浏览器上运行的代码时,您是指实习生测试本身吗?
    • 如果我使用 grunt 运行测试,那它仍然无法工作吗?
    • @8785krs,grunt 在节点上运行,所以仍然不会定义窗口对象
    • @juan Mendes。设置代码是指实习生测试中的设置功能吗?我试着把它放在那里,但它仍然给出同样的错误
    • 在功能测试中,除了传递给executeexecuteAsync 的函数外,测试模块本身的任何内容仍然在Node.js 中执行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 2013-05-14
    • 2014-11-23
    • 2010-10-21
    • 2018-02-16
    相关资源
    最近更新 更多