Я пытаюсь реорганизовать свои приемочные тесты Ember, чтобы не использовать метод устаревший authorize
, так как он выдает предупреждение:
The `authorize` method should be overridden in your application adapter
Я проверил документы и множество других источников, но они на самом деле не объясняют как перенести мой код. Вот то, что у меня есть на данный момент:
// projectname/app/pods/login/controller.js (excerpt)
export default Controller.extend({
session: service(),
sessionToken: null,
onSuccess: function(res) {
res = res.response;
this.set('sessionToken', res.session);
if (res.state === "authenticated") {
document.cookie = "token="+res.session+";path=/;";
var authOptions = {
success: true,
data : {
session : res.session,
}
};
this.get('session').authenticate("authenticator:company", authOptions);
}
}
});
И от этой части я должен избавиться:
// project/app/adapters/application.js (excerpt)
export default DS.RESTAdapter.extend(DataAdapterMixin, {
authorize(xhr) { // This is deprecated! I should remove it
let sessionToken = this.get('session.data.authenticated.session');
if (sessionToken && !isEmpty(sessionToken)) {
xhr.setRequestHeader('Authorization', "Token " + sessionToken);
}
},
});
И вот мой тест:
import { test, module } from 'qunit';
import { visit, currentURL, find, click, fillIn } from '@ember/test-helpers';
import { setupApplicationTest } from 'ember-qunit';
import { authenticateSession} from 'ember-simple-auth/test-support';
module('moduleName', function(hooks) {
setupApplicationTest(hooks);
test('moduleName', async function(assert) {
// await authenticateSession(this.application); // Never works
// await authenticateSession(); // Never works
await authenticateSession({
authenticator: "authenticator:company"
}); // Works slightly more?
await visit('/my/other/page');
await assert.equal(currentURL(), '/my/other/page');
});
});
УДАЛЕНИЕ метода authorize
и попытка любого из закомментированных методов приводит к:
Error: Assertion Failed: The `authorize` method should be overridden in your application adapter. It should accept a single argument, the request object.
Если я использую блок authenticator
в качестве аргумента, то независимо отПри наличии метода authorize
я просто получаю:
actual: >
/login
expected: >
/my/other/page
Что, как я полагаю, связано с тем, что он не вошел в систему.
Оставив там метод authorize
и попробовавКомментируемые методы дают:
Error: Browser timeout exceeded: 10s