Vue 集成测试与 Axios 和真实服务器调用



作为vue测试的新手,我正在尝试使用axios和mocha为我们的Vue SPA进行集成测试。

我希望一些测试能够在不嘲笑的情况下对我们的服务器进行真正的api 调用,以确定它是否真的从头到尾有效。服务器API是一个Laravel 7应用程序,具有laravel/sanctum和基于cookie的会话身份验证。

我可以直接在测试文件中进行真正的 axios 调用,如下所示:

import authApi from '../../src/components/connections/auth';
describe('AxiosCallTest', () => {
it('makes an axios call', function(done) {
this.timeout(5000);
authApi.get('/sanctum/csrf-cookie').then((response) => {
console.log('response: ', JSON.stringify(response));
done();
}).catch(() => {
done();
});
});
});
// -> response:  {"data":"","status":204,"statusText":"No Content","headers":{"cache-control":"no-cache, private"},"config":{"url":"/sanctum/csrf-cookie","method":"get","headers":{"Accept":"application/json","X-Requested-With":"XMLHttpRequest"},"baseURL":"http://testing.backend.vipany.test/api/auth","transformRequest":[null],"transformResponse":[null],"timeout":30000,"withCredentials":true,"xsrfCookieName":"XSRF-TOKEN","xsrfHeaderName":"X-XSRF-TOKEN","maxContentLength":-1,"axios-retry":{"retryCount":0,"lastRequestTime":1591774391768}},"request":{"upload":{"_ownerDocument":{"location":{"href":"http://localhost/","origin":"http://localhost","protocol":"http:","host":"localhost","hostname":"localhost","port":"","pathname":"/","search":"","hash":""}}},"_registeredHandlers":{},"_eventHandlers":{}}}

我已经阅读并尝试了很多,现在有 2 个问题:

  • 处理 CSRF 令牌 Cookie 和会话 Cookie(用于身份验证(的 Cookie,就像在传统请求上一样,浏览器会开箱即用地处理。
  • 等待 vue 组件中的 axios 调用,因为我不能像在这个例子中那样在组件本身中使用 mocha 的 done(( 函数。我只能找到带有 moxios 或类似嘲笑请求的示例。但我不想嘲笑公理的调用。

有没有人知道一篇关于这些问题的好文章或已经解决了它?

多谢


更新

我找到了一篇文章来从 axios 请求中获取 cookie,并自己尝试从响应中获取 X-XSRF-TOKEN(我已经在浏览器中检查了它:HttpOnly:false,安全:false(,但它不起作用:

console.log('response X-XSRF-TOKEN: ', response.config.headers['X-XSRF-TOKEN']); 
// -> undefined

发现赛普拉斯和夜巡是端到端测试(e2(的正确工具。
不知道正确的术语(e2e 或端到端测试(和正确的工具。

切换到 cypress.io - 绝对很棒。

Vue-CLI 甚至有第一手插件来集成赛普拉斯或守夜人:https://cli.vuejs.org/core-plugins/e2e-cypress.html

最新更新