我正在努力调试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更长的响应时间 - 虽然这似乎不太可能,因为测试在不到一秒的时间内运行。有人遇到过这样的问题吗?
由于
答案 0 :(得分:2)
我的预感是,在isAuth
完成对后端的身份验证之前,您可能正在评估ember-simple-auth
。对于与您类似的测试,我在await settled();
之后await click();
。
如果没有做到这一点,那么您可以尝试使用waitFor
中的waitUntil
或ember-test-helpers
来确保身份验证已完成。