首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QUnit setup()在拆卸前为每个测试调用

QUnit setup()在拆卸前为每个测试调用
EN

Stack Overflow用户
提问于 2013-06-12 12:26:24
回答 2查看 5.2K关注 0票数 2

我正在将QUnitrequire.js结合使用,用于backbone.js应用程序的单元测试。所有的测试都是异步的,使用asyncTest方法。

我正在使用setupteardown来构建和删除每个测试的、构建和删除。我的问题是,尽管asyncTest似乎是阻塞的,但在每个测试启动之前,setup()都会被调用,几乎所有的setup()调用都同时运行。这个解决方案似乎没能解决我的问题。下面我有一个如何设置模块的示例,下面是一个指向说明问题的测试存储库的链接

我的问题是:我是不是做错了什么,还是这个QUnit的正常行为?

代码语言:javascript
复制
module('Module', {
    setup: function(){
        console.log('setup');
    },
    teardown: function(){
        console.log('teardown');
    }
})

asyncTest('Test 1', function() {
    setTimeout(function(){
        equal(2, 2, 'The return should be 2.');
        start();
    }, 400);
});

asyncTest('Test 2', function() {
    setTimeout(function(){
        equal(1, 1, 'The return should be 1.');
        start();
    }, 400);
});
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-17 10:42:32

QUnit期望有一种相当特定的页面加载行为。通过requirejs加载它可能看起来很有效,但实际上不起作用。建议通过一个常规脚本标记加载QUnit。只要你像你一样设置QUnit.config.autostart = false,通过需求加载测试本身就可以了。

票数 6
EN

Stack Overflow用户

发布于 2014-01-04 00:03:12

包含解决方案约恩·扎弗勒的Blogpost指定上图 - http://www.jonnyreeves.co.uk/2012/qunit-and-requirejs/

以下是我所实现的-

我遇到的问题是:

我通过要求包括了qunit。对于所有同步测试来说,这似乎都很好。我在qunit模块的设置中定义了一个变量,并在解压缩时返回为null。当我包含一个asyncTest时,它似乎没有被解压正确地重置,因此破坏了在那个之后运行的所有测试,这些测试都需要一个新的变量。

关键点

  • 通过自己的脚本标记包括qunit
  • 将自动启动设置为false
  • 在需要所有测试模块之后重新启动。

这可能不是最优雅的,但我也没有碰到任何一个端到端的例子,我只花了几个小时找到这个答案(因为我第一次认为我的asyncTest设置不正确)。

代码语言:javascript
复制
<link rel="stylesheet" href="qunit-1.12.0.css">
<script type="text/javascript" src="qunit-1.12.0.js"></script>
<script>
    QUnit.config.autostart = false
    require(['App'],
    function(){

        //Modules that have been loaded in by require.js
        var loadedModules = [];

        //Locations of test modules to load
        var moduleLocations = [
            'tests/test1',
            'tests/test2',
            'tests/test3'
        ];

        //If all modules have been loaded, run them
        function runTests(){
            if (loadedModules.length == moduleLocations.length){
                QUnit.start();
                _.each(loadedModules,function(test){
                    test();
                });
            }
        }

        _.each(moduleLocations,function(string){
            require([string],
            function(a){
                loadedModules.push(a);
                runTests();
            });
        });

    });
</script>

单独的测试模块文件:

代码语言:javascript
复制
define(['array','of','test','requirements'], function() {

    return function(){

        var options = null;

        module('Autocomplete',{
            setup: function() {
                // prepare something for all following tests
                options = new whatever();
            },
            teardown: function() {
                // clean up after each test
                options = null;
            }
        });

        test( "normal tests", function() {
            ok(true,"normal assertions");
        });
    }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17065488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档