2015-05-01 92 views
0

我試圖編寫一個unit test用於在ajax調用中使用simple-auth authentication的控制器。斷言測試效果很好,但session屬性似乎沒有在unit test模塊範圍中定義。使用ember-cli-simple-auth進行Ember-cli單元測試

實施例動作在控制器:

authenticate() { 
    let credentials = this.getProperties('identification', 'password'); 
    this.get('session').authenticate('simple-auth-authenticator:token', credentials) 
    .then(() => { 
     this.transitionToRoute('index'); 
    }, (error) => { 
     this.set('errorMessage', error.error); 
    }); 
} 

實施例試驗:

it('should not authenticate', function() { 
    let controller = this.subject(); 
    controller.send('authenticate'); 
    expect(controller.get('errorMessage')).to.equal("Invalid email/password combination"); 
}); 

會話是未定義的錯誤消息:

TypeError: Cannot read property 'authenticate' of undefined 
at authenticate (http://localhost:7357/assets/app.js:587:28) 
at mixin.Mixin.create.send (http://localhost:7357/assets/vendor.js:37164:54) 
at Context.<anonymous> (http://localhost:7357/assets/app.js:2002:18) 
at Context.wrapper (http://localhost:7357/assets/test-support.js:1756:27) 
at invoke (http://localhost:7357/assets/test-support.js:13772:21) 
at Context.suite.on.context.it.context.specify.method (http://localhost:7357/assets/test-support.js:13837:13) 
at Test.require.register.Runnable.run (http://localhost:7357/assets/test-support.js:7064:15) 
at Runner.require.register.Runner.runTest (http://localhost:7357/assets/test-support.js:7493:10) 
at http://localhost:7357/assets/test-support.js:7571:12 
at next (http://localhost:7357/assets/test-support.js:7418:14) 

回答

1

在單元測試你沒有一個運行的應用程序所以在初始化器中發生的注射等不會運行。確保會話存在於控制器中的最好方法是將其存根,這也可以很容易地確保它在您的測試中的行爲。

另一種方法是將單元測試轉變爲驗收測試 - 在這種情況下,您有一個初始化的應用程序,測試運行並且會話將在控制器中可用。