为什么这个余烬测试失败了 - Ember JS,控制器

时间:2013-12-21 20:53:13

标签: javascript ember.js qunit

var model, controller;

// Set up the controller in a new container.
// On tear down, set the variables to null,
// we reset  the app on setup.
module('User Edit Controller', {
    setup: function(){
        AisisPlanner.reset();
        controller = AisisPlanner.__container__.lookup('controller:user_edit');
        model = AisisPlanner.User.store.createRecord('user', {
            name: 'john doe',
            userName: 'john_doe',
            email: 'a@test.com',
            bio: '',
            pictureUrl: '',
            role: 'Administrator'
        });
        controller.set('model', model)
    },
    teardown: function(){
      controller = null;
      model = null
    }
});

test('capatalize_user_name', function(){
  model.set('userName', 'John doe')
  equal(controller.get('userName'), 'JOHN DOE', 'all caps');
});

以下测试很容易弄清楚正在做什么,从当前容器和模型设置控制器。然后在该模型中设置信息并在测试中使用它来输入名称。

问题是我收到了错误:

Setup failed on capatalize_user_name: 'undefined' is not an object (evaluating 'AisisPlanner.User.store.createRecord')

Died on test #2 global code@http://localhost:3000/assets/controllers/user_edit_controller_test.js?body=1:26:5: 'undefined' is not an object (evaluating 'model.set')

我从以下方面得到了这个想法:this blog post on how to test controllers.我认为它大部分已经过时但我尝试了它。任何想法如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

因此,要通过此测试,我必须执行以下操作:

var model, controller;

// Set up the controller in a new container.
// On tear down, set the variables to null,
// we reset  the app on setup.
module('User Edit Controller', {
    setup: function(){
        AisisPlanner.reset();
        Ember.run(function(){
            controller = AisisPlanner.__container__.lookup('controller:user_edit');
            model = controller.get('store').createRecord('user', {
                name: 'Jhon Doe',
                userName: 'John_Doe',
                email: 'a@test.com',
                bio: '',
                pictureUrl: '',
                role: 'Administrator'
            });
            controller.set('model', model)
        });
    },
    teardown: function(){
      controller = null;
      model = null
    }
});

test('capatalize_user_name', function(){
    Ember.run(function(){
        model.set('userName', 'JOHN DOE')
        equal(controller.get('userName'), 'JOHN DOE', 'all caps');
    });
});

Ember.run()必须围绕它自己的控制器/模型的测试和设置。

然后必须将测试更改为将模型userName设置为JOHN DOE,因为set表示您正在设置某些内容,因此控制器不能像“哦,是的,john doe是大写的。”

答案 1 :(得分:0)

模型类上不存在商店,但它在控制器上存在

controller = AisisPlanner.__container__.lookup('controller:user_edit');
model = controller.get('store').createRecord('user', {....

在Ember运行语句中包装任何失败的行(我不确定这是否是失败的行,只是一个例子)

Em.run(function(){
  controller.set('model', model);
});