gpt4 book ai didi

javascript - 使用 requirejs 设置 headless 单元测试

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:35:58 24 4
gpt4 key购买 nike

这似乎是一种 Search for the Holy Grail,但我正在寻找 JavaScript 单元测试环境的设置。要求是:

  • 测试 Requirejs AMD 模块
  • 通过模拟依赖关系来隔离每个模块
  • 开发期间可在浏览器中测试
  • 可在 headless 环境中进行测试以实现持续集成

除了 headless 的 mock 之外,一切似乎都是直截了当的。

到目前为止,我已经测试了 JS-Test-Driver , Karma , 和 Phantomjs ,为了模拟,我使用了 SquireIsolate -- 以及 the answer here 中代码的实现似乎没有什么是完全正确的。我一次又一次遇到的主要问题是测试框架在所有测试运行之前返回——主要是因为模拟需要它们自己的 require() 依赖项。

任何帮助(或脚手架)都会很有帮助!

[编辑]

我已经建立了一个基本的工作 Karma project在 Github 上有一些示例模拟测试,使用 chai-expect 作为匹配库。我将尝试添加更多有用的文档,但如果您熟悉 Karma,那么扩展它应该非常简单。只需 git clone 然后 npm install 即可运行。

最佳答案

通常每个测试框架都允许您进行异步测试和手动启动测试,这应该是您需要的。

Q单元

对于 QUnit,您需要将 autostart 设置为 false 以启用手动启动测试:

QUnit.config.autostart = false;

require(['test/qunit/test.js'], function() {
QUnit.start();
});

如果您在测试期间异步加载东西,只需使用 QUnits stop()start() 方法:

test('something that loads asynchronously', function() {
stop();
define(['something'], function(sth) {
ok(sth, 'Something loaded');
start();
});
});

摩卡咖啡

Mocha 的工作原理非常相似:

/*globals mocha */
mocha.setup('bdd');

require([ 'test/mocha/test.js' ], function() {
mocha.run();
});

通过声明一个将作为规范回调的参数,异步测试甚至更好:

describe('an async something', function() {
it('loads the dependency', function(done) {
define(['something'], function(sth) {
ok(sth, 'Something loaded');
done();
});
});
});

这通常应该有效。要记住的一件事是,如果您使用 RequireJS 加载测试文件,测试可能不会总是以相同的顺序运行。

关于javascript - 使用 requirejs 设置 headless 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16727699/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com