2015-05-01 4 views
0

Я пытаюсь написать unit test для контроллера, который использует simple-auth authentication в вызове ajax. Тесты утверждений отлично работают, но свойство session, как представляется, не определено в области модуля unit test.Единичный тест Ember-cli с использованием ember-cli-simple-auth

Пример действие в контроллере:

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"); 
}); 

Session неопределенно сообщение об ошибке:

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

В модульных тестах вы не запущенное приложение поэтому инъекции и т. д., которые происходят в инициализаторах, не выполняются. Лучший способ убедиться, что сеанс существует в контроллере, - это заглушить его, что также упростит его работу, как вы хотите, чтобы он вел себя в своем тесте.

Альтернативой было бы превратить модульный тест в приемочный тест - в этом случае у вас есть инициализированное приложение, в котором проходит тест, и сеанс будет доступен уже на контроллере.

Смежные вопросы