gpt4 book ai didi

ember.js - Ember 3.0 验收重定向测试永远挂起

转载 作者:行者123 更新时间:2023-12-01 12:45:25 25 4
gpt4 key购买 nike

我在 modern 中编写了一个简单的验收测试RFC 268 format适用于 Ember 3.0

测试是针对一个页面,如果用户未经身份验证,URL 会立即重定向到 /login

...

module('Acceptance | index', function (hooks) {
setupApplicationTest(hooks);

test('visiting / logged out', async function(assert) {
assert.expect(1);

// Test hangs here forever.
await visit('/');

assert.equal(currentURL(), '/login');
});
});

这个测试使用旧格式和 moduleForAcceptance 效果很好。

不幸的是,此测试在 Ember 3.0 中永远挂起。我在这里错过了什么吗?有没有更好的方法来测试重定向?

控制台没有错误,添加了一些console.log 语句表明await 是测试挂起的地方。

最佳答案

我找到了失败的原因。我有一个 Ember mixin,我用它来增强我所有的路由。 mixin 检查用户是否经过身份验证,并根据需要重定向到 /login

export default Mixin.create({
session: service(),

beforeModel() {
this._super(...arguments);

return new EmberPromise((resolve) => {
if (authenticated) {
resolve();
return;
}

this.transitionTo('login');
});
}
});

您会注意到,如果 authenticated 是假的,我不会解析。这适用于我的应用程序和 2.18 中的测试语法。

docs say以下是关于我在混入中覆盖的那个钩子(Hook)。

returns Any | Promise

if the value returned from this hook is a promise, the transition will pause until the transition resolves. Otherwise, non-promise return values are not utilized in any way.

对我来说,“非 promise 返回值”这一点意味着我应该能够做我正在做的事情。特别是考虑到这在 2.18 中有效,但我想知道这是否是那些“哇,这首先是如何工作的”场景之一。显然这种语法在 3.0 中不起作用。因为在测试时过渡会永远暂停。

我的答案是确保我总是解决/拒绝某事。在这种情况下,我必须添加一个明确的 reject(),这样 promise 链就不会挂起。

export default Mixin.create({
session: service(),

beforeModel() {
this._super(...arguments);

return new EmberPromise((resolve) => {
if (authenticated) {
resolve();
return;
}

this.transitionTo('login');
reject();
});
}
});

我的测试很好。需要更新的是 mixin,以便与 Ember 3.0 和最新的测试语法一起正常工作。

关于ember.js - Ember 3.0 验收重定向测试永远挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48997841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com