2014-09-25 8 views
1

로그인 및 체크 아웃 작업과 함께 수행되는 모든 작업을 포함하여 테스트를 작성하려고합니다. 여기에 지금까지하고 있어요 무엇 :Ember CLI를 사용한 통합 테스팅 세션

테스트/통합/세션-test.js

import Ember from "ember"; 
import { test } from 'ember-qunit'; 
import startApp from '../helpers/start-app'; 
var App; 

module('Integrations: Sessions', { 
    setup: function() { 
    App = startApp(); 
    }, 
    teardown: function() { 
    Ember.run(App, App.destroy); 
    } 
}); 

test('Unsuccessful Sign In', function() { 
    expect(3); 
    visit('/sign-in'); 
    andThen(function() { 
    fillIn('input#email', '[email protected]'); 
    fillIn('input#password', 'bad_password'); 
    click('input#submit'); 
    andThen(function() { 
     equal(currentRouteName(), 'sign-in', 'Unsuccessfull sign in stays on the sign in page.'); 
     ok($('input#email, input#password').hasClass('error'), 'Inputs have a class of "error."'); 
     equal($('input#submit').prop('disabled'), false, 'Submit button is not disabled.'); 
    }); 
    }); 
}); 

test('Successful Sign In', function() { 
    expect(2); 
    visit('/sign-in'); 
    andThen(function() { 
    fillIn('input#email', '[email protected]'); 
    fillIn('input#password', 'password'); 
    click('input#submit'); 
    andThen(function() { 
     equal(currentRouteName(), 'welcome', 'Successfull sign in redirects to welcome route.'); 
     ok(find('.message').length, "Page contains a list of messages."); 
    }); 
    }); 
}); 

그리고, 여기에 배후 논리에서 기호의 아래 손질 버전입니다 :

응용 프로그램/컨트롤러/로그인 in.js

import Ember from 'ember'; 
export default Ember.Controller.extend({ 
    needs: ['application'], 

    actions: { 
    signIn: function() { 
     var self = this; 
     var data = this.getProperties('email', 'password'); 

     // Attempt to sign in and handle the response. 
     var promise = Ember.$.post('/v3/sessions', data); 
     promise.done(function(response) { 
     Ember.run(function() { 
      self.get('controllers.application').set('token', response.access_token); 
      self.transitionToRoute('welcome'); 
     }); 
     }); 

     ... 
    } 
    } 
}); 

이 테스트 "에 실패 로그인은"광주를 작동 아주 좋아. "성공적인 로그인"이 작동하기 시작한 다음 중간에 종료됩니다. 로그인 후 올바르게 리디렉션됩니다. 시작 페이지에서 메시지를 가져 오기 위해 전화를 걸면 노드 서버는 Error: Not enough or too many segments 및 500 상태로 응답합니다. 전 세계에서 API를 제어 할 수 없다고 가정 할 때 그 의미는 무엇이며 어떻게 수정할 수 있습니까?

또한 API는 주로 Koa와 Passport를 사용하여 작성되었습니다.

답변

0

알아 냈어. 분명히 그것은 인증 오류였습니다. 오류 메시지로 추측 할 수있는 것이 아니 었습니다.

로그인 컨트롤러에는 응용 프로그램 컨트롤러의 토큰 속성을 설정하는 행이 있습니다. 응용 프로그램 컨트롤러에는 변경 내용을 감시하는 관찰자가 있었으며 변경된 AJAX 헤더를 설정할 수있었습니다. 문제는 테스트하는 동안 사용할 수없는 Ember의 실행 루프를 사용하는 것입니다.

문제를 해결하기 위해 환영 경로로 전환하기 직전에 로그인 컨트롤러에 AJAX 헤더를 설정했습니다.