【发布时间】:2020-09-28 17:25:50
【问题描述】:
作为 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":{}}}
我已经阅读并尝试了很多,现在有两个问题:
- 为 CSRF 令牌 Cookie 和会话 Cookie(用于身份验证)处理 cookie,就像在常规请求中浏览器开箱即用地处理这个一样。
- 等待 vue 组件中的 axios 调用,因为我不能在组件本身中使用 mocha 的 done() 函数,就像我在本示例中所做的那样。我只能找到使用 moxios 或类似的模拟请求的示例。但我不想模拟 axios 调用。
有没有人知道一篇关于这些问题的好文章或已经解决了它?
非常感谢
更新:
我找到了一个 article 来从 axios 请求中获取 cookie,并自己尝试从响应中获取 X-XSRF-TOKEN(我在浏览器中检查过:HttpOnly: false,安全:假),但它不起作用:
console.log('response X-XSRF-TOKEN: ', response.config.headers['X-XSRF-TOKEN']);
// -> undefined
【问题讨论】:
标签: vue.js mocha.js vue-test-utils