繁体   English   中英

使用 Jest 和酶进行 IndexedDB 测试 - ReferenceError: indexedDB 未定义

[英]IndexedDB testing with Jest & enzyme - ReferenceError: indexedDB is not defined

我正在为我的应用程序寻求单元测试方面的帮助,我正在使用 indexedDB。 在我实现 indexedDB 功能之前,测试是正确的。 但是现在,对于所有这些,我都看到一个错误:

ReferenceError: indexedDB is not defined

有人可以给我建议如何摆脱那个错误吗? 我正在搜索信息,并尝试使用不同的方法来模拟windowindexedDB ,但没有结果。

此问题是由于 Dexie 期望定义window.indexedDB ,而在没有真正 DOM 或window范围的无头模式(使用 Jest)下运行时,情况并非如此。

在 Dexie git 问题中找到了一个解决方案,它表明:

const Dexie = require('dexie')

Dexie.dependencies.indexedDB = require('fake-indexeddb')
Dexie.dependencies.IDBKeyRange = require('fake-indexeddb/lib/FDBKeyRange')

我们在以下方面也取得了成功:

import Dexie from 'dexie';
import indexedDB from 'fake-indexeddb';

Dexie.dependencies.indexedDB = indexedDB;

原问题链接: https : //github.com/dfahlander/Dexie.js/issues/495

或者根据文档,您可以提供 indexedDB 选项,例如:

import Dexie from 'dexie';
import indexedDB from 'fake-indexeddb';

var db = new Dexie("MyDatabase", { indexedDB: indexedDB });

文档链接: http : //dexie.org/docs/Dexie/Dexie

如果您正在使用 jest 和酶来测试 indexdb,或者您正在使用 dexie 它是一个 indexDB 包装器,它也用于实现 indexDB api,您只需在 global-test.js 文件中添加这三行。

const Dexie = require('dexie');
Dexie.dependencies.indexedDB = require('fake-indexeddb');
Dexie.dependencies.IDBKeyRange = require('fake-indexeddb/lib/FDBKeyRange');

现在您必须将此文件提供给 jest,以表明它可以使用 fake-indexddb 而不是原始 indexDB。

setupFiles: ['<rootDir>/src/test/globals-test.ts']

使用 jest 时,根据fakeindexeddb 文档,安装,

npm install --save-dev fake-indexeddb

或者

yarn add --dev fake-indexeddb

然后将以下代码添加到 jestconfig 文件中

"jest": {
    ...
    "setupFiles": [
        "fake-indexeddb/auto"
    ]
}

我没有使用 Dexie(而是在 Firebase 在导入时抛出异常时到达这里),修复只是将require('fake-indexeddb/auto')setupTests.ts以供 Jest 使用。

对于带有玩笑的 Angular 7.3+,请将其添加到您的 global-test.ts 文件中:

const Dexie = require('dexie');
Dexie.dependencies.indexedDB = require('fake-indexeddb');
Dexie.dependencies.IDBKeyRange = require('fake-indexeddb/lib/FDBKeyRange');

然后在 jest.config.js 中加载文件:

module.exports = {
    preset: 'jest-preset-angular',
    transformIgnorePatterns: ['node_modules'],
    setupTestFrameworkScriptFile: '<rootDir>/src/setupJest.ts',
    moduleNameMapper: {
        '\\.(jpg|jpeg|png)$': '<rootDir>/__mocks__/image.js',
        '@lib/(.*)': '<rootDir>/src/lib/$1'
    },
    globals: {
        'ts-jest': {
            tsConfigFile: 'src/tsconfig.spec.json'
        },
        __TRANSFORM_HTML__: true
    },
    setupFiles: ['<rootDir>/src/test/globals-test.ts']
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM