2013-06-19 124 views
1

我试图用requirejs和jsTestDriver intellij插件编写一些javascript单元测试。当我在IDE中运行它们时,即使有一些,我也没有错误。我只在打开浏览器控制台时看到它们。 有人设法使IDE插件将失败转化为require函数吗? 我的代码如下和一些屏幕截图说明我的问题。JsTestDriver在intellij中使用requirejs时断言

TestCase("Collections", { 
    "test User Collection": function() { 
     require(['lib/underscore', 'lib/backbone', 'app/user', 'app/collections'], 
      function (_, Backbone, user, appCollections) { 
       assertNotUndefined('Users must be defined', appCollections.users); 
       assertTypeOf('Users must be backbone collection', typeof Backbone.Collection, appCollections.users); 
       assertTypeOf("Users' model must be a user", typeof Backbone.Model, appCollections.users.model); 
      }); 
    } 
}); 

Intellij jsTestDriver plugin test result

My browser console

+0

JS测试驱动器和这里介绍requirejs - HTTP:/ /stackoverflow.com/questions/12482072/is-it-possible-to-run-js-test-driver-tests-that-uses-requirejs-modules。你必须明白你写的测试可能是异步的,因此js-test-driver可能不知道在测试方法返回之前测试没有运行。 –

+0

感谢您的回答。它实际上是异步的,因为当您在require函数后面添加一条指令时,它会在require函数内的任何指令之前执行。是否有任何意思让它等待整个执行的结束?您评论中的链接不处理这个异步问题。 –

+0

也许这个页面将有所帮助 - http://code.google.com/p/js-test-driver/wiki/AsyncTestCase。 –

回答

1

我没有测试过这一点,但它可能让你开始:

var CollectionsTest = AsyncTestCase('Collections'); 

CollectionsTest.prototype.testIt = function(queue) { 

    queue.call('Step 1', function(callbacks) { 

    function test1(_, Backbone, user, appCollections) { 
     assertNotUndefined('Users must be defined', appCollections.users); 
     assertTypeOf('Users must be backbone collection', typeof Backbone.Collection, appCollections.users); 
     assertTypeOf("Users' model must be a user", typeof Backbone.Model, appCollections.users.model); 
    } 

    var onModulesLoaded = callbacks.add(test1); 

    require(['lib/underscore', 'lib/backbone', 'app/user', 'app/collections'], onModulesLoaded); 

    }); 

}; 
+0

谢谢,这按预期工作,正是我所期待的。 –