Dexie.js:Table.where() 错误“无法读取未定义的属性‘bound’”

问题描述 投票:0回答:2

我在使 where() 语句在 Dexie 中工作时遇到一些麻烦。我尝试使用 where 导致以下错误:

 console.warn node_modules/dexie/dist/dexie.js:1273
    未处理的拒绝:类型错误:无法读取未定义的属性“绑定”
        在 makeIDBKeyRange (node_modules/dexie/src/dbcore/dbcore-indexeddb.ts:112:21)
        在node_modules/dexie/src/dbcore/dbcore-indexeddb.ts:314:31
...

这是我使用的代码:

从“dexie”导入Dexie;
// @ts-ignore 没有假indexeddb的类型
从“fake-indexeddb”导入indexedDB;

类 TestDatabase 扩展 Dexie {
  构造函数(){
    超级(“测试”);
    this.version(1).stores({
      数据:“ID、姓名”
    });
  }
}

测试(“dexie”,异步()=> {
  Dexie.dependency.indexedDB = indexedDB;
  const db = new TestDatabase();
  wait db.table("data").put({id: "x", name: "xname"});
  const x=await db.table("data").get("x");
  期待 (x.name).toEqual("xname");

  const x2=await db.table("data").where("id").equals("x").toArray()
  期望 (x2[0].name).toEqual("xname");
})

测试似乎在调用 toArray() 时失败。我怎样才能通过这个测试?

typescript indexeddb dexie
2个回答
1
投票

我认为您还缺少设置 Dexie.dependency.IDBKeyRange。

Fake-indexeddb 建议执行以下操作以将 fake-indexeddb 集成到节点中:

const Dexie = require("dexie");
require("fake-indexeddb/auto");

const db = new Dexie("MyDatabase");

查看他们的文档


1
投票

谢谢@大卫。文档让我找到了这个解决方案。运行没有错误:

import Dexie from "dexie";
// @ts-ignore there is not a type for the fake indexeddb
import indexedDB from 'fake-indexeddb';

class TestDatabase extends Dexie {
    constructor() {
        const IDBKeyRange=require("fake-indexeddb/lib/FDBKeyRange");
        super("test",{
            indexedDB: indexedDB,
            IDBKeyRange: IDBKeyRange,
        });
        this.version(1).stores({
            data: "id, name"
        });
    }
}


test("dexie", async ()=>{
    const db = new TestDatabase();
    await db.table("data").put({id: "x", name: "xname"});
    const x=await db.table("data").get("x");
    expect (x.name).toEqual("xname");

    const x2=await db.table("data").where("id").equals("x").toArray();
    expect (x2[0].name).toEqual("xname");
})
© www.soinside.com 2019 - 2024. All rights reserved.