针对localhost上的静态Web应用程序运行实习功能测试

时间:2016-11-08 15:41:40

标签: javascript functional-testing intern

我有一个静态网络应用。 Html,JS(requirejs模块)和一些CSS。 目前'serverUrl'是通过属性模块设置的,我可以“需要”并使用它的值:

define({
    serverUrl: 'https://some.api/path/'
})

我有使用src / index.html作为入口点在浏览器中运行功能测试的Intern设置。

return this.remote
    .get(require.toUrl('src/index.html'))

鉴于serverUrl在属性文件中是硬编码的,我正在尝试找到一种方法来针对serverUrl指向localhost:1234/someFakeServer的网络应用运行测试,以便我可以测试错误场景等。

我已经在网上搜索了但找不到任何与我类似的人,这让我觉得我做的事情显然是错的。有NODE应用程序的解决方案,使用配置模块,但因为我从来没有“启动”我的网络应用程序 - 它只是文件,这些对我不起作用。

我曾考虑过一些解决方案,但无法弄清楚如何实现:

  • Intern代理文件:9000,所以如果我能以某种方式'构建'一个应用程序,另一个属性文件指向localhost,一切都很好。但我不知道该怎么做 - 我看过webpack和类似的东西,但他们似乎没有做我想要的。
  • 我查看了Interns'Install'配置项,它允许在测试开始之前运行一个函数 - 所以我考虑在那里修改属性文件,但似乎太hacky并且不确定我是怎么做的把它放回去......

1 个答案:

答案 0 :(得分:1)

假设Intern可以访问属性文件,您可以让Intern加载属性文件并从中提取服务器URL。如果您有多个潜在的属性文件,则可以在Intern配置中设置正在使用的属性文件,也可以将其作为自定义命令行变量(用于在Intern配置中设置属性)传入。测试模块可以从Intern的配置中获取属性文件的名称,然后加载相关文件。它可能看起来像这样(未经测试):

// intern config
define({
    // ...
    propertiesFile: 'whatever',
})

// test file
define([ 'intern', ... ], function (intern, ...) {
    registerSuite({
        // ...
        'a test': function () {
            var did = this.async();
            var remote = this.remote;
            require([
                intern.config.propertiesFile
            ], dfd.callback(function (props) {
                return remote.get(props.url)
                    .otherStuff
            });
        }
    });
});