使用Typescript模块时确保执行顺序

时间:2019-03-29 03:49:06

标签: typescript es6-modules

我正在尝试添加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');
    }
  }
}

1 个答案:

答案 0 :(得分:0)

尝试切换到require是否有效:

require('fake-indexeddb/auto');
const localDb = require('@/...DrugsLocalDb');

describe('setup local db', () => {
    const db = new localDb.DrugsDBLocal(fileFetch, new EmptyLogger());