Vue JS-单元测试-未定义本地存储

问题描述 投票:3回答:1

我正在使用Mocha和chai为vue cli 3编写单元测试。我曾尝试嘲笑本地存储。但仍然出现此错误-'未定义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);
  });
});
unit-testing local-storage mocha chai vue-cli-3
1个回答
0
投票

对于任何可能偶然发现此问题的人-以下对我有用:

[1)在单元测试文件夹中创建一个setup.js文件,并添加以下代码:

require('jsdom-global')();

global.localStorage = window.localStorage;

修复了“” localStorage is undefined“]错误后,您可能会遇到其他错误(就像我一样)。最后,以下代码片段修复了所有问题:

require('jsdom-global')(undefined, { url: 'https://localhost' });

global.localStorage = window.localStorage;
global.sessionStorage = window.sessionStorage;
window.Date = Date;

...您可以在此处找到更多信息: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"

© www.soinside.com 2019 - 2024. All rights reserved.