首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Jest & IndexedDB -ReferenceError进行indexedDB测试:未定义Jest

使用Jest & IndexedDB -ReferenceError进行indexedDB测试:未定义Jest
EN

Stack Overflow用户
提问于 2017-12-22 08:12:19
回答 4查看 5.3K关注 0票数 8

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

代码语言:javascript
复制
ReferenceError: indexedDB is not defined

有人能给我一个建议如何摆脱这个错误吗?我在搜索信息,并尝试了不同的方法来模拟windowindexedDB,但没有结果。

EN

回答 4

Stack Overflow用户

发布于 2018-02-12 23:54:03

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

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

代码语言:javascript
复制
const Dexie = require('dexie')

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

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

代码语言:javascript
复制
import Dexie from 'dexie';
import indexedDB from 'fake-indexeddb';

Dexie.dependencies.indexedDB = indexedDB;

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

或者根据文档,可以提供indexedDB选项,如下所示:

代码语言:javascript
复制
import Dexie from 'dexie';
import indexedDB from 'fake-indexeddb';

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

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

票数 13
EN

Stack Overflow用户

发布于 2019-01-11 02:33:13

如果你正在使用jest和酶来测试索引数据库,或者你正在使用dexie,这是一个同样用于实现test.js应用编程接口的indexdb包装器,你只需要在你的indexDB -test.js文件中添加这三行。

代码语言:javascript
复制
const Dexie = require('dexie');
Dexie.dependencies.indexedDB = require('fake-indexeddb');
Dexie.dependencies.IDBKeyRange = require('fake-indexeddb/lib/FDBKeyRange');

现在你必须将这个文件提供给jest,证明它可以使用伪索引而不是原始的indexDB。

代码语言:javascript
复制
setupFiles: ['<rootDir>/src/test/globals-test.ts']
票数 8
EN

Stack Overflow用户

发布于 2019-10-11 00:15:08

我没有使用Dexie (而是在Firebase在导入时抛出异常时出现在这里),修复方法只是将require('fake-indexeddb/auto')添加到setupTests.ts中,以便Jest拾取。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47934383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档