我正在尝试添加indexedDB的内存填充程序,以便在Node中运行测试。
目前我有2个模块:
import Dexie from 'dexie';
export class DrugsDBLocal extends Dexie { ...
fake-indexedDb会填充适当的indexedDB函数,例如:
var globalVar = typeof window !== "undefined" ? window : // self, global etc.
globalVar.indexedDB = fakeIndexedDB;
globalVar.IDBCursor = FDBCursor;
// nothing exported
测试:
import 'fake-indexeddb/auto';
import { DrugsDBLocal } from '@/...DrugsLocalDb';
describe('setup local db', () => {
const db = new DrugsDBLocal(fileFetch, new EmptyLogger());
问题在于Dexie在运行polyfill之前正在执行。显然,我不希望在DrugsDBLocal模块中添加导入,因为polyfill不应该出现在浏览器中。测试是使用webpack(作为vue-cli项目)从打字稿中转译而成的,该综合文件将代码从“ fake-indexeddb / auto”放置在Dexie库的下面。
如何确保首先执行空的“ fake-indexeddb / auto”导入?
修改 Vue cli在每次测试运行时都会构建一个新的webpack.config.js。我认为我需要像this webpack reference中那样定义一个新条目。我尝试了以下方法,但没有成功
module.exports = {
pages: process.env.NODE_ENV !== 'test' ? void 0 : {
testPolyfills:'./tests/test_resources/testPolyfills.js'
},
chainWebpack: config => {
if (process.env.NODE_ENV === 'test') {
config.entry('app').add('./src/main.ts');
}
}
}
答案 0 :(得分:0)
尝试切换到require
是否有效:
require('fake-indexeddb/auto');
const localDb = require('@/...DrugsLocalDb');
describe('setup local db', () => {
const db = new localDb.DrugsDBLocal(fileFetch, new EmptyLogger());