【问题标题】:setup for headless unit testing using requirejs使用 requirejs 设置无头单元测试
【发布时间】:2013-05-19 15:01:13
【问题描述】:

这似乎是一种“寻找圣杯”,但我正在寻找一种用于 JavaScript 单元测试环境的设置。要求是:

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

除了无头嘲讽之外的一切似乎都是直截了当的。

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

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

[编辑]

我已经在 Github 上建立了一个基本的工作 Karma project 并带有一些示例模拟测试,使用 chai-expect 作为匹配库。我会尝试添加更多有用的文档,但如果您熟悉 Karma,它应该很容易扩展。只需 git clonenpm install 即可运行。

【问题讨论】:

    标签: javascript unit-testing mocking requirejs


    【解决方案1】:

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

    QUnit

    对于 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 加载测试文件,测试可能并不总是以相同的顺序运行。

    【讨论】:

    • 看起来 Mocha 肯定会成功,因为每个测试(或断言)都可以接受回调,使其异步。不过,我仍然无法使用 Mocking。我现在尝试将 Squire 与 Mocha 一起使用。
    • 我不会太担心嘲笑。如果你构建你的应用程序的方式是每个小部件都是解耦的(有点像它自己的应用程序)并单独测试它们,你可以先开始测试最低级别的小部件,然后是由其他小部件组成的小部件(因为你知道你依赖的那些应该已经工作了)。我通常嘲笑的少数事情之一是 AJAX 响应和诸如SocketIO。
    • 同意。但有时你肯定想完全隔离逻辑,或者至少去掉可能导致竞争条件等的各种事情。我想我会坚持使用答案Koberle made in this other thread 中的模拟代码。它非常简单,并且在 Karma 中效果很好。
    猜你喜欢
    • 1970-01-01
    • 2013-06-29
    • 1970-01-01
    • 2016-04-17
    • 2020-12-23
    • 2014-09-18
    • 1970-01-01
    • 2016-03-29
    • 2012-07-09
    相关资源
    最近更新 更多