2015-12-07 11 views
8

Specs:EmberJS-Service-Injektion für Unit-Tests (Ember QUnit)

  • Ember Version: 1.13.8
  • Knoten: 0.10.33
  • npm: 2.13.4

I haben

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"); 
 
});
(Verwenden von "Alias" als Beispiel, weil ich nicht erlauben, tatsächlichen Code anzuzeigen)

Ich habe versucht, den Dienst zu initialisieren, aber während Ember Qunit Tests, Controller haben nicht die Dienste zu ihnen injiziert.

Ich habe versucht, die Injektion bei der Umsetzung: init() statt before, funktioniert auch nicht ...

Wie spritze ich es während der Unit-Tests?

Ich legte Breakpoints in den Debugger, um zu sehen, ob meine Controller den Dienst haben, tut es nicht während der Tests. Es ist jedoch gut auf normalen Glut servieren.

Antwort

7

Sie müssen den Dienst nicht importieren. Sie müssen Service in Bedürfnisse wie unten enthalten.

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

Zum Beispiel:

Service/alias.js

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

Controller/test.js

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

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

Tests/Eh/Controller/Test-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); 

    }); 

Damit dieser Test ausgeführt wird, erzeugt Ember einen Container mit den Nummern controller test und service alias. Sie können also auf die Serviceeigenschaften mit dem vorangestellten Namen zugreifen.

+0

Dies löste mein Problem mit Ember-Simple-Auth-Sitzung in Komponententests –

Verwandte Themen