Mat*_*lak 5 javascript testing indexeddb jestjs enzyme
我正在寻找有关我的应用程序的单元测试的帮助,我正在使用indexedDB.在我实现indexedDB功能之前,测试是正确的.但是现在,对于所有这些我看到一个错误:
ReferenceError: indexedDB is not defined
Run Code Online (Sandbox Code Playgroud)
有人可以给我一个如何摆脱这个错误的建议吗?我正在搜索信息,并尝试不同的方式来模拟'window'或'indexedDB',但没有结果.
谢谢.
Seg*_*aab 10
使用jest时,根据fakeindexeddb文档,安装,
npm install --save-dev fake-indexeddb
Run Code Online (Sandbox Code Playgroud)
或者
yarn add --dev fake-indexeddb
Run Code Online (Sandbox Code Playgroud)
然后将以下代码添加到 jestconfig 文件中
"jest": {
...
"setupFiles": [
"fake-indexeddb/auto"
]
}
Run Code Online (Sandbox Code Playgroud)
这个问题是由于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')
Run Code Online (Sandbox Code Playgroud)
我们也取得了成功:
import Dexie from 'dexie';
import indexedDB from 'fake-indexeddb';
Dexie.dependencies.indexedDB = indexedDB;
Run Code Online (Sandbox Code Playgroud)
链接到原始问题: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 });
Run Code Online (Sandbox Code Playgroud)
链接到文档:http://dexie.org/docs/Dexie/Dexie
小智 6
如果您正在使用 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');
Run Code Online (Sandbox Code Playgroud)
现在您必须将此文件提供给 jest,以表明它可以使用 fake-indexddb 而不是原始 indexDB。
setupFiles: ['<rootDir>/src/test/globals-test.ts']
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1646 次 |
最近记录: |