2014-10-25 2 views
4

Я пытаюсь получить тестовый помощник, используя Ember CLI, но я всегда получаю [functionName] is undefined. Вот мой тест, помощник, так как согласно emberjs docs:EmberJS + EmberCLI Unit Test Helper Function Undefined

`import Ember from "ember"` 

acceptanceHelpers = -> 
    Ember.Test.registerAsyncHelper("performLogin", (app) -> 
     visit "/login" 

     fillIn("#username", "sampleusername") 
     fillIn("#password", "samplepassword") 

     click(".form-actions button:first") 
     wait() 
    ) 

`export default acceptanceHelpers` 

И где я использую его: login-test.coffee:

`import Ember from "ember"` 
`import startApp from "../helpers/start-app"` 
`import acceptanceHelpers from "../helpers/acceptance-helpers"` 

App = null 

module "Acceptance: Login", 
    setup: -> 
     App = startApp() 

    teardown: -> 
     Ember.run App, "destroy" 

test "User is able to log in/transition to dashboard", -> 
    performLogin() 
    andThen -> 
     equal(currentRouteName(), "dashboard") 

Но я получаю:

ReferenceError: performLogin is not defined at Object.module.setup (unhost/tests/acceptance/login-test.js:15:16) at Object.Test.setup (http:// localhost :4200/assets/test-support.js:1063:31) at http:// localhost :4200/assets/test-support.js:1168:10 at process (http:// localhost :4200/assets/test-support.js:887:24) at http:/ /localhost :4200/assets/test-support.js:476:5

Как может Я настраиваю свой тест приёма для правильного использования определенных тестовых помощников в Ember CLI?

ответ

1

Это, скорее всего, jshint недостаток, вам нужно добавить performLogin в tests/.jshintrc к predef массива:

"predef": [ 
    "document", 
    "window", 
    "performLogin", // like this 
    ... 
+1

Я уже сделал это. Я все равно получаю ту же ошибку. – user1429980

3

Несколько вариантов здесь:

Вы можете просто сделать простую вспомогательную функцию, чтобы использовать , если вы хотите импортировать в каждый тестовый файл:

//acceptance-helpers.js 
export function performLogin() { 
    visit "/login" 

    fillIn("#username", "sampleusername") 
    fillIn("#password", "samplepassword") 

    click(".form-actions button:first") 
    // wait() <--- This wait is unnecessary, 'click' will cause a wait 
} 

А потом в тесте:

//login-test.js 
import Ember from 'ember'; 
import startApp from '../helpers/start-app'; 
import { performLogin } from '../helpers/acceptance-helpers'; 

var App; 
module("Acceptance: Login", { 
    setup: function(){ 
    App = startApp(); 
    }, 
    teardown: function(){ 
    Ember.run(App, 'destroy'); 
    } 
}); 

test("User is able to log in/transition to dashboard", function(){ 
    performLogin(); 
    andThen(function(){ 
    equal(currentRouteName(), "dashboard"); 
    }); 
}); 

Создание и использование зарегистрированного помощника:

//Easiest is to put in test-helper.js ... it must be evaled before injectTestHelpers is called in startApp 
Ember.Test.registerAsyncHelper('performLogin', function (app) { 
    visit "/login" 

    fillIn("#username", "sampleusername") 
    fillIn("#password", "samplepassword") 

    click(".form-actions button:first") 
    // wait() <--- wait is again unnecessary 
}); 

А потом в тесте:

//login-test.js 
import Ember from 'ember'; 
import startApp from '../helpers/start-app'; 
//No need to import anything to get performLogin, it was registered 

var App; 
module("Acceptance: Login", { 
    setup: function(){ 
    App = startApp(); 
    }, 
    teardown: function(){ 
    Ember.run(App, 'destroy'); 
    } 
}); 

test("User is able to log in/transition to dashboard", function(){ 
    performLogin(); 
    andThen(function(){ 
    equal(currentRouteName(), "dashboard"); 
    }); 
});