4

我有一个模块,我正在使用 mocha-phantomjs 测试这个模块。我创建了package.json文件

{
  "name"        : "demo-test",
  "scripts": {
    "test": "npm run test-debug",
    "test-debug": "mocha-phantomjs ./test/Test1.html"
  },
  "dependencies" : {
    "mocha"     : "1.13.x",
    "commander" : "1.2.x",
    "which"     : "~1.0.5",
    "mocha-phantomjs": "3.3.2"
  },
  "devDependencies" : {
    "chai"          : "1.8.x",
    "coffee-script" : "1.6.x",
    "requirejs"     : "2.1.x",
    "jquery"        : "2.1.0"
  }
}

然后我运行npm install,然后npm test运行测试。它工作正常并运行test1.html. 现在我希望 test 目录下的所有文件(test1,test2,...)在运行时执行npm test

我可以通过在 package.json 文件中单独调用 then 来运行所有 html 文件,但如果有办法加载所有 Html 文件。

4

2 回答 2

1

通常,您会将Tests.html文件传递​​给mocha-phantomjs运行程序,该运行程序将加载您要使用脚本标签运行的所有测试文件。

Tests.html将包含:

<script src="controller-tests/one-controller-test.js"></script>
<script src="controller-tests/another-controller-test.js"></script>
<script src="controller-tests/yet-another-controller-test.js"></script>
<script src="service-tests/one-service-test.js"></script>
<script src="service-tests/another-service-test.js"></script>
<script src="service-tests/yet-another-service-test.js"></script>

或者,如果您使用的是RequireJS或其他AMD库,您可以加载一个test-init.js文件,并在该文件中单独或以嵌套方式要求所有测试文件,如下所示:

测试.html

<script src="test-init.js"></script>

test-init.js

require('controller-tests/init.js');
require('service-tests/init.js');

控制器测试/init.js

require('one-controller-test.js');
require('another-controller-test.js');
require('yet-another-controller-test.js');

服务测试/init.js

require('one-service-test.js');
require('another-service-test.js');
require('yet-another-service-test.js');
于 2014-10-14T04:42:28.430 回答
0

我同意丹阿里。

我使用相同的引导加载程序和测试设置。

摩卡BDD

据推测,默认情况下,在“BDD”模式下运行 Mocha 会在项目根目录的“test”目录中查找 html 文件。它首先查找名为“test.html”的文件。“test/test.html”是 Mocha 用作夹具文件的默认路径目标。

关于 RequireJS/AMD

关于客户端 (AMD) 风格的 RequireJS,我使用二进制分支模式。

-index.html
  |
  -/js/rjsMain.js
-test/test.html
  |
  -/js/rjsTest.js

我将我的 RequireJS 配置部分分离到一个新文件中(我称之为“rjsConfig.js”)。该文件包含路径别名、依赖垫片等。

那么,我的 RequireJS “data-main” 文件 “/js/rjsMain.js” 看起来像这样:

require(['rjsConfig'], function () {
    require(['app/main'], function () {});
});

然后我复制了 Require "main.js" 文件,为我的 Mocha 固定文件添加了一个备用入口点。

这样做的原因是您不必为 Require 维护两个单独的配置文件。很高兴有一个共享文件。

幻影JS

让 PhantomJS 实际加载异步加载的内容并与之交互?那是另一回事。这可能非常棘手。

幸运的是,我找到了一个可以解决问题的文件。

它没有一个很好的名字,但是——至少对我来说——“load_ajax.js”是让它工作的秘诀。

https://gist.github.com/kalharbi/fc9d4f71b5e2a8f485cc

您需要对其进行自定义以针对您的本地路线运行。

于 2016-11-17T22:28:46.473 回答