Тестирование ember-simple-auth в Ember App Kit

Я пытаюсь выполнить интеграционные/приемочные тесты для моего приложения Ember. Я специально тестирую аутентификацию пользователей (например, отправку формы входа) и защищенные страницы/состояния, которые требуют аутентификации пользователей.

Общие примечания о моем приложении:

  • Использование набора приложений Ember
  • Использование ember-simple-auth для аутентификации
  • У меня есть заглушки API для моего Ember -simple-auth формы для доступа с помощью авторизатора Devise. Они отлично работают при запуске приложения в браузере.

У меня три проблемы:

1. Разработайте аутентификатор и временное хранилище

Из API ember-simple-auth это относится к использованию эфемерного хранилища для тестов. Я сделал так, много вот так. Однако кажется, что сеансы все еще сохраняются в локальном хранилище. Если я не выполняю localStorage.clear() в каждом тесте, установка/разборка завершается неудачно, потому что я остаюсь в системе, когда каждый тест запускается после первого.

Могу ли я предотвратить сохранение сеанса в локальном хранилище между каждым тестом, когда я использую аутентификатор Devise для своего приложения?

2. Множественные приемочные испытания

Если я попытаюсь зайти пользователя в более чем 1 test(), мои тесты превращаются в бесконечный цикл. Первый тест будет пройден, но когда второй тест отправляет форму входа, весь набор тестов останавливается и перезагружается.

Интеграционный тест № 1

App = null

module('Acceptance - Page #1',
  setup: ->
    App = startApp()

  teardown: ->
    Ember.run(App, 'destroy')
)

test('page #1 behind authentication', ->
  expect(1)

  visit('/page-1')
  fillIn('input#identification', '[email protected]')
  fillIn('input#password', 'password')
  click('button[type="submit"]')
  andThen(->
    equal(true, true) # This test works fine
  )
)

Интеграционный тест №2

App = null

module('Acceptance - Page #2',
  setup: ->
    App = startApp()

  teardown: ->
    Ember.run(App, 'destroy')
)

test('page #2 behind authentication', ->
  expect(1)

  visit('/page-2')
  fillIn('input#identification', '[email protected]')
  fillIn('input#password', 'password')
  click('button[type="submit"]')
  andThen(->
    equal(true, true) # Never runs, tests start over, infinite loop begins
  )
)

3. API-заглушки EAK и Testem

заглушки API EAK, похоже, не быть доступным для Testem, поэтому процесс «входа» в эти приемочные тесты при запуске через командную строку/Testem завершается ошибкой.

Я попытался настроить sinon.js, но вышеупомянутые проблемы помешали мне решить, работает ли он на самом деле правильно или нет. Каков наилучший способ успешно заглушить вход пользователя с ember-simple-auth? Можно ли использовать API-заглушки EAK для Testem?


person David    schedule 16.04.2014    source источник


Ответы (2)


Пример настройки эфемерного хранилища, на который вы ссылаетесь выше, устарел (если вы используете его, он в основном не имеет никакого эффекта и по умолчанию будет использовать хранилище localStorage) — для нового API см. документацию по API здесь: http://ember-simple-auth.simplabs.com/ember-simple-auth-api-docs.html#Ember-SimpleAuth-setup.

Возможно, исправление этого также устраняет вашу вторую проблему (возможно, форма входа в систему фактически не отображается во втором тесте, поскольку пользователь все равно вошел в систему, поскольку вы используете хранилище localStorage?).

person marcoow    schedule 17.04.2014
comment
Спасибо. Использование обновленной опции API storeFactory исправлено #1. Однако это не исправило № 2. Форма однозначно отображается. Бесконечный цикл начинается сразу после отправки формы. Любое руководство? Какую часть библиотеки ember-simple-auth я могу начать выполнять? - person David; 18.04.2014
comment
Мне удалось обнаружить, что бесконечный цикл связан с тем фактом, что форма входа на самом деле отправляется (как будто без предотвращения JS) и обновляет страницу во время второго теста входа. Понятия не имею почему. Для дальнейшей отладки я изменил действие authenticate, чтобы оно срабатывало при нажатии кнопки, а не при отправке формы, но теперь тесты переворачиваются при каждом запуске. Я до сих пор не знаю, почему. - person David; 18.04.2014
comment
Хорошо, после 3 дней борьбы с этим я наконец нашел проблему. Виновником была библиотека fastclick. Я не вникал в подробности, почему, но удаление fastclick со страницы при тестировании решает проблему № 2. Спасибо за помощь. Оглядываясь назад, я должен был опубликовать три отдельных вопроса, чтобы выбрать ваш ответ в качестве ответа на № 1. - person David; 18.04.2014

С помощью @marcoow и нескольких других вопросов SO и проблем GitHub я смог решить все свои проблемы:

1. Разработайте аутентификатор и временное хранилище

Я использовал устаревший вариант API в своем коде. Обновление для использования более новой опции API storeFactory решило мою проблему сеанса localStorage.

#  app/initializers/simple-auth.coffee
if Ember.testing == true
  options = Ember.merge({ storeFactory: 'session-store:ephemeral' }, options)

2. Множественные приемочные испытания

Оказалось, что это связано с другой библиотекой, которую я загружал, под названием fastclick. После обновления моего индексного файла для загрузки этой библиотеки только в нетестовых средах мои проблемы с отправкой формы/бесконечным циклом исчезли.

// app/index.html
<!-- @if tests=false -->
  <script src="/vendor/emberjs-touch/lib/ember-fastclick.js"></script>
<!-- @endif -->

3. API-заглушки EAK и Testem

Я обнаружил, что другие люди сталкиваются с подобными проблемы со мной на StackOverflow. На их вопросы в конечном итоге ответили/решили, что помогло мне решить мои собственные проблемы. В комментариях к этой проблеме GH есть ссылка на решение этой проблемы. Пример здесь.

person David    schedule 17.04.2014