2013-12-21 108 views
0
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: '[email protected]', 
      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'); 
}); 

以下測試很容易找出正在做什麼,從當前容器和模型設置控制器。然後在該模型中設置信息並在測試中使用它來傳播名稱。爲什麼這個灰燼測試失敗 - Ember JS,控制器

的問題是,我收到錯誤:

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

Died on test #2 global [email protected]://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

因此,對於這個測試通過,我必須做到以下幾點:

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: '[email protected]', 
       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()必須在測試和設置它自己的控制器/模型。

然後,測試必須被更改爲將模型用戶名設置爲JOHN DOE,因爲集表示您正在設置某些內容,因此控制器可能不會像「哦,你好,約翰多伊是大寫的。

0

的商店沒有在模型類存在,但它確實控制器

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

裹在灰燼運行語句中的任何失敗線(我不知道這是否是失敗線或不,只是一個例子)

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

哈,絕對不是,只是一個口吃的錯字,而只打左手。 – Kingpin2k

+0

現在會引發兩個新錯誤:capatalize_user_name上的安裝程序失敗:斷言失敗:您已打開測試模式,該模式禁用了運行循環的自動運行。您需要將任何帶有異步副作用的代碼封裝在Ember.run中 來源:\t http:// localhost:3000/assets/ember.js?body = 1:61 在測試#2上死亡全局代碼@ http:// localhost:3000/assets/controllers/user_edit_controller_test.js?body = 1:26:5:'undefined'不是一個對象(評估'model.set') – TheWebs

+0

我把一個運行在回答中的例子,在測試中未定義模型? – Kingpin2k