Mawaheb
Mawaheb

Reputation: 832

Qunit testing an ember controller, located in a file that contains multiple controllers?

So, I've been trying to qunit test an Ember controller, The problem is, The controller is inside a coffeeScript file, that contains multiple controllers.

Now, The ember testing guide says, In order to test a controller, I should use the 'moduleFor' helper like so:

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

In my case, the full name is say: "CustomersIndexController" , But because it's included in "customers_controller.coffee" that in it self includes multiple controller, Testing it became problematic .

After an Endless digging online, I found out (Please correct me if I'm wrong) that the resolver cares only about the file name, not about the name that 'export default myModel' provides

To make it more clear, Here is my "customers_controller.coffee" :

`export { CustomersIndexController, CustomersItemController }`

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

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

And here is the customers-controller-test.coffee file :

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

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

I've tried all the ideas that my brain could produce...without any luck(changing the controller name from camelCase to dasherized, to absolute path, even tried importing customers_controller.coffee), But I keep getting:

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

Any Help/Advice/Links are highly appreciated.

Upvotes: 1

Views: 431

Answers (2)

Kim Røen
Kim Røen

Reputation: 468

If you take a look at the documentation for the resolver with ember-cli, you'll see that it does indeed only care about the names of the files, and what is the default export of them: http://www.ember-cli.com/#using-modules

In your case, you'll need to split your controllers into multiple files, so the resolver can find and instantiate them properly. So, the two files would be:

  • app/controllers/customers/index.coffee
  • app/controllers/customers/item.coffee

This is all assuming you are using ember-cli. If you are still using ember-app-kit, you might need to adjust this slightly, but the same basic idea should apply.

Upvotes: 0

Kingpin2k
Kingpin2k

Reputation: 47367

You should be able to defined it in lower camelCase.

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

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

Upvotes: 2

Related Questions