Man*_*kar 6 unit-testing mocha.js local-storage chai vue-cli-3
我正在使用 Mocha 和 chai 为 vue cli 3 编写单元测试。我试过嘲笑localstorage。但仍然收到此错误 - 'localStorage 未定义'。任何人都可以在这里帮助我吗?
我的代码是这样的 -
import { expect, assert } from 'chai';
import { shallowMount } from '@vue/test-utils';
import LoginComponent from '@/views/LoginComponent.vue';
import Constants from '@/constants';
declare var global: any;
let wrapper;
let componentInstance: any;
let authData;
var mockLocalStorage = {
getItem(key: any) {
if (key === 'access_token') { return '/* a token object */'; }
return 'null';
}
};
describe('LoginComponent.vue', () => {
beforeEach(() => {
global.window = { localStorage: mockLocalStorage };
authData = JSON.stringify(Constants.AUTH_DATA);
wrapper = shallowMount(AliUMSLoginComponent, {
propsData: { authData }
});
componentInstance = wrapper.vm;
});
it('has a created hook', () => {
assert.isNotNull(componentInstance.authData);
});
});
Run Code Online (Sandbox Code Playgroud)
对于任何其他可能偶然发现这个问题的人 - 以下内容对我有用:
1)在单元测试文件夹中创建一个setup.js文件并添加以下代码:
require('jsdom-global')();
global.localStorage = window.localStorage;
Run Code Online (Sandbox Code Playgroud)
修复“localStorage 未定义”错误后,您可能会遇到其他错误(就像我一样)。最后,以下代码片段修复了所有问题:
require('jsdom-global')(undefined, { url: 'https://localhost' });
global.localStorage = window.localStorage;
global.sessionStorage = window.sessionStorage;
window.Date = Date;
Run Code Online (Sandbox Code Playgroud)
...您可以在这里找到更多信息:vuejs/vue-cli/issues/2128和这里:vuejs/vue-test-utils/issues/936
2)更新文件中的测试脚本package.json以加载刚刚创建的安装文件:
"test:unit": "vue-cli-service test:unit --require tests/unit/setup.js"