gpt4 book ai didi

javascript - vue测试如何让localStorage正常工作

转载 作者:行者123 更新时间:2023-11-30 20:07:41 25 4
gpt4 key购买 nike

我正在尝试测试 vue 组件。

我有一个使用 vuex 的 vue 单文件组件。我的状态存储在使用 localStoragestore.js 中。但是,当我运行 npm test 时,我收到错误消息:

WEBPACK Compiled successfully in 9416ms

MOCHA Testing...

RUNTIME EXCEPTION Exception occurred while loading your tests

ReferenceError: localStorage is not defined

我用于测试的工具:@vue/test-utils, expect, jsdom, jsdom-global, mocha, mocha-webpack


我如何运行测试:

"test": "mocha-webpack --webpack-config node_modules/laravel-mix/setup/webpack.config.js --require tests/JavaScript/setup.js tests/JavaScript/**/*.spec.js"

示例测试,order.spec.js:

require('../../resources/assets/js/store/store');
require('../../resources/assets/js/app');
import { mount } from '@vue/test-utils';
import Order from '../../resources/assets/js/views/order/List.vue';
import expect from 'expect';

describe('Order', ()=>{
it('has alert hidden by default', () => {
let wrapper = mount(Order);
expect(wrapper.vm.alert).toBe(false);
})
})

setup.js 文件中,我像这样加载 jsdom:

require('jsdom-global')();

我该如何解决这个问题?

最佳答案

jsdom-global 使用的是旧版本的 jsdom。 jsdom 从 11.12.0 开始支持 localStorage

要使用带有 localStorage 支持的 jsdom 11.12+,您可以在测试设置文件中自行将 jsdom window 属性添加到 global 范围在你的测试之前运行:

/* setup.js */

const { JSDOM } = require('jsdom');

const jsdom = new JSDOM('<!doctype html><html><body></body></html>');
const { window } = jsdom;

function copyProps(src, target) {
Object.defineProperties(target, {
...Object.getOwnPropertyDescriptors(src),
...Object.getOwnPropertyDescriptors(target),
});
}

global.window = window;
global.document = window.document;
global.navigator = {
userAgent: 'node.js',
};
global.requestAnimationFrame = function (callback) {
return setTimeout(callback, 0);
};
global.cancelAnimationFrame = function (id) {
clearTimeout(id);
};
copyProps(window, global);

关于javascript - vue测试如何让localStorage正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52714446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com