所以,我一直在尝试qunit测试Ember控制器,问题是,控制器在coffeeScript文件内,包含多个控制器。
现在,ember测试指南说,为了测试一个控制器,我应该像这样使用'moduleFor'帮助器:
moduleFor(fullName [, description [, callbacks]])
在我的情况下,全名是说:"CustomersIndexController",但因为它包含在"customers_controller"。咖啡",在它本身包含多个控制器,测试它成为问题。
经过无休止的在线挖掘,我发现(如果我错了请纠正我),解析器只关心文件名,而不是关于'export default myModel'提供的名称
为了更清楚,这里是我的"customers_controller"。咖啡":
`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`
任何帮助/建议/链接都是非常感谢的。
你应该能够用骆驼小写来定义它。
moduleFor('controller:postsIndex', 'Posts Index Controller');
http://jsbin.com/ruhalota/1/edit 如果您看一下ember-cli解析器的文档,您会发现它确实只关心文件的名称,以及它们的默认导出:http://www.ember-cli.com/#using-modules
在您的示例中,您需要将控制器拆分为多个文件,以便解析器可以找到并正确地实例化它们。所以,这两个文件是:
- app/controllers/客户/index.coffee
- app/controllers/客户/item.coffee
这些都是假设您正在使用ember-cli。如果你还在使用ember-app-kit,你可能需要稍微调整一下,但是基本的思路还是一样的。