Qunit测试一个ember控制器,它位于一个包含多个控制器的文件中?

时间:2014-06-04 15:57:04

标签: unit-testing testing ember.js qunit ember-qunit

所以,我一直在试图测试一个Ember控制器,问题是,控制器位于一个包含多个控制器的coffeeScript文件中。

现在,ember testing guide says,为了测试控制器,我应该使用' moduleFor'像这样的助手:

moduleFor(fullName [, description [, callbacks]])

就我而言,全名是:" CustomersIndexController" ,但因为它包含在" customers_controller.coffee"在它自己包括多个控制器,测试它成为问题。

在网上无尽挖掘之后,我found out(如果我错了,请纠正我)解析器只关心文件名,而不是关于导出默认myModel&#的名称39;提供

为了更清楚,这是我的" customers_controller.coffee" :

`export { CustomersIndexController, CustomersItemController }`

CustomersIndexController = Ember.ArrayController.extend
#Code goes here ......

CustomerItemController = Ember.ObjectController.extend
#Code goes here .....

这是customers-controller-test.coffee文件:

`import { test, moduleFor } from 'ember-qunit';`
 moduleFor("controller:customers-index-controller", 'C Controller') 

 test "it's an App.Controller", -> ok(@subject())

我已经尝试了我的大脑可以产生的所有想法......没有任何运气(将控制器名称从camelCase更改为dasherized,到绝对路径,甚至尝试导入customers_controller.coffee),但我一直得到:

Setup failed on it's a App.Controller: Attempting to register an unknown factory: `controller:customers-index-controller`

非常感谢任何帮助/建议/链接。

2 个答案:

答案 0 :(得分:2)

您应该能够在较低的camelCase中定义它。

moduleFor('controller:postsIndex', 'Posts Index Controller');

http://jsbin.com/ruhalota/1/edit

答案 1 :(得分:0)

如果你看一下使用ember-cli的解析器的文档,你会发现它确实只关心文件的名称,以及它们的默认导出是什么:http://www.ember-cli.com/#using-modules

在您的情况下,您需要将控制器拆分为多个文件,以便解析器可以正确地找到并实例化它们。所以,这两个文件将是:

  • 应用程序/控制器/客户/ index.coffee
  • 应用程序/控制器/客户/ item.coffee

这是假设您使用的是ember-cli。如果您仍在使用ember-app-kit,则可能需要稍微调整一下,但应该采用相同的基本想法。