обеспечение порядка выполнения при использовании модулей Typescript - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь добавить в память shim 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, так как в браузере не должно присутствовать многозаполнение.Тесты переносятся из машинописного текста с использованием веб-пакета (как проект vue-cli), и конгломерированный файл помещает код из 'fake-indexeddb / auto' ниже библиотеки Dexie.

Как убедиться, что пустой импорт 'fake-indexeddb / auto' выполняется первым?

Редактировать Vue cli создает новый файл webpack.config.js при каждом запуске теста,Я думаю, что мне нужно определить новую запись, как в этой ссылке веб-пакета .Я пробовал следующее безуспешно

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 голосов
/ 29 марта 2019

Попробуйте, если переключение на require работает:

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

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