2015-12-07 60 views
8

規格:注射(人力QUnit)EmberJS服務單元測試

  • 人版本:1.13.8
  • 節點:0.10.33
  • NPM:2.13.4

我有

import Alias from "../../../services/alias"; 
 
.... 
 

 
moduleFor("controller:test", "Controller: test", { 
 
    integration: true, 
 

 
    beforeEach: function() { 
 
    this.register('service:alias', Alias, {singleton: true}); 
 
    this.inject.service('alias', { as: 'alias' }); 
 
    this.advanceReadiness(); 
 
    }, 
 
}); 
 
... 
 

 
test('Alias Alias Alias ', function(assert) { 
 
    var controller = this.subject(); 
 

 
    //sample function 
 
    controller.send("test"); 
 
    assert.equal(true, controller.alias.get("alias"), "alias should be true"); 
 
});
(使用「別名」作爲例子,因爲我不是讓顯示實際的代碼)

我試圖初始化服務,但Qunit人在測試過程中,控制器沒有服務,以它們注射。

我試圖把在注:的init()beforeEach INSTEAD OF,無法正常工作或有

...我怎麼把它注射在單元測試?

我把破發點中的調試器,看看我的控制器都具有服務,它並沒有在測試過程中。這是罰款正常的人服務,但是。

回答

7

您不必導入服務。你必須像下面服務的需求,包括。

moduleFor("controller:test", { 
    needs: ['service:alias'] 
}); 

對於例如:

服務/ alias.js

Em.service.extend({ 
    name: 'john' 
}); 

控制器/ test.js

Em.Controller.extend({ 
    alias: Em.service.inject(), 

    test: function() { 
    alert(this.get('alias.name'); 
    } 
    }); 

測試/單元/控制器/體test.js

moduleFor('controller:test', { 
    needs: ['service:store'] 
}); 

test('Alias Alias Alias', function(assert) { 

    var controller = this.subject(); 
    assert.equal(controller.get('store.name'), 'john); 

    }); 

對於這個測試運行,將產生男子與容器和controller testservice alias。所以,你可以訪問它的名稱爲前綴屬性服務。

+0

這解決了我的問題與單元測試人簡單身份驗證會話 –