Ember простые аутентификационные тесты с перебоями - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь отладить неудачные тесты в приложении Ember 3.0.У меня есть форма входа с использованием ember-simple-auth.Действие аутентификации выглядит следующим образом:

let { identification, password } = this.getProperties('identification', 'password');
this.get('session').authenticate('authenticator:devise', identification, password)
.catch((reason) => {
    this.set('loginError', reason.errors || reason);
});

Мой тест просто заполняет форму и нажимает кнопку, чтобы вызвать это действие, а затем проверяет, что пользователь вошел в систему:

invalidateSession();
await visit('/');

fillIn('#identification', 'test@email.com');
fillIn('#password', 'secret');
await click('.login-btn');

let sesh = currentSession();
let isAuthed = get(sesh, 'isAuthenticated');
assert.equal(
  isAuthed,
  true,
  'after a user submits good creds to login form, they are logged in'
);

Использованиебэкэнд Mirage, это работает каждый раз.Однако, используя Rails API, который возвращает тот же ответ, этот тест не проходит примерно половину времени.Кажется случайным, пройдет он или нет.

Я не уверен, где проблема здесь.Приложение Rails работает локально на порту 3000, поэтому это не проблема сети.Интересно, истекает ли время ожидания теста, потому что API требует больше времени, чем Mirage, хотя это кажется маловероятным, поскольку тесты выполняются менее чем за секунду.Кто-нибудь сталкивался с такой проблемой?

Спасибо

1 Ответ

0 голосов
/ 01 июня 2018

Я догадываюсь, что вы, возможно, оцениваете isAuth до того, как ember-simple-auth завершит аутентификацию с бэкэндом.Для моих тестов, которые похожи на ваши, у меня есть await settled(); после await click();.

Если это не сработает, то вы можете попробовать использовать waitFor или waitUntil из ember-test-helpersчтобы убедиться, что аутентификация завершена.

...