是否有延迟QUnit测试套件启动的方法?

问题描述:

我正在尝试解决单元测试问题。是否有延迟QUnit测试套件启动的方法?

我曾经有一个主要工作的Maven - > PhantomJS - > Qunit设置,但它是不可预知的,所以我把它分开试图修复它。

我升级的软件:

Qunit: 1.11.0 
PhantomJS: 1.8 
Phantom Qunit Runner Latest: https://github.com/jquery/qunit/tree/master/addons/phantomjs 

我看到Web GUI工作。它运行并通过了所有102个测试。控制台输出:

$ phantomjs --disk-cache=false runner.js http://localhost/ui/dcx/test.html 
$ Took 16ms to run 0 tests. 0 passed, 0 failed. 

如果我在runner中注释掉exit命令,它会多次打印QUnit.done的控制台输出。

$ phantomjs --disk-cache=false runner.js http://localhost/ui/dcx/test.html 
$ PhantomJS successfully loaded a page 
$ QUnit.done callback fired 
$ Took 15ms to run 0 tests. 0 passed, 0 failed. 
$ QUnit.done callback fired 
$ Took 1840ms to run 102 tests. 102 passed, 0 failed. 
$ QUnit.done callback fired 
$ Took 1841ms to run 102 tests. 102 passed, 0 failed. 
$ QUnit.done callback fired 
$ Took 1842ms to run 102 tests. 102 passed, 0 failed. 
$ QUnit.done callback fired 
$ Took 1848ms to run 102 tests. 102 passed, 0 failed. 
$ ^C 
$ 

在我看来,Qunit.done回调得到执行太快,然后多次。

任何人都知道为什么这个回调触发?

我的测试包含和登录延迟可能是相关的。我使用AMD模块定义测试和curl.js带给他们什么也没有发生,直到安全登录呢:

curl(['dolla'], function($){ 
     $.ajax({ 
     type: 'POST', 
     url: '/svc/j_spring_security_check', 
     data: { 
      j_username: '7', 
      j_password: '7' 
     }, 
     success: function() { 
      loadTests() 
     } 
    }); 
}) 
var loadTests = function() { 
    curl([ 
     // Unit tests 
     'dcx/dataControls/activity.test' 
     , 'dcx/dataControls/eventList.test' 
     , 'dcx/dataControls/mapViewer.view.test' 
     , 'dcx/pages/deviceDetails.view.test' 
     , 'dcx/pages/login.test' 
     , 'dcx/pages/nodeProfiles.test' 
     , 'dcx/pages/settings.view.test' 
    ], function() {}, function(ex) { throw new Error(ex) }) 
}) 

编辑: 我下来了病根,我想。 如果您在空白页面中包含QUnit,它会立即调用QUnit.begin和QUnit.done。 我需要延迟执行Qunit,直到安全登录成功并且curl引入我的单元测试之后。有没有办法延迟QUnit的启动,但仍然保持Qunit对象可用?我不能使用stop(),因为有很多异步测试会调用start()。

找到了答案。您可以将QUnit配置为不启动,然后在加载所有测试时手动启动它。这可以防止重复调用Qunit.done,这是造成此问题的根本原因。

http://forum.jquery.com/topic/are-qunit-and-requirejs-compatible#14737000001967123

+1

您应该将此答案标记为正确。 – TMB 2013-06-10 19:52:54

这是一种方法 - 修改跑步者在没有测试结果时不会退出。 https://gist.github.com/SimpleAsCouldBe/5059623

虽然这不起作用,但Qunit.done在测试堆栈被清除时触发。在像Curl/Require.js这样的异步加载环境中,这可能随时发生。