反应本机博览会出现错误 _ExpoSQLiteNext.default.NativeDatabase 不是 SQLite.openDatabaseAsync('db.testDb') 中的构造函数

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

当我使用 SQLite.openDatabaseAsync('db.testDb'); 时出现以下错误

错误 类型错误:_ExpoSQLiteNext.default.NativeDatabase 不是构造函数

代码片段:-

    import * as SQLite from 'expo-sqlite'

    export const DbConnection = async () => {
    const db = SQLite.openDatabaseAsync('db.testDb') // returns Database object

    // Check if the items table exists if not create it
    db.transaction(tx => {
        tx.executeSql(
            'CREATE TABLE IF NOT EXISTS items (id INTEGER PRIMARY KEY AUTOINCREMENT, text TEXT, count INT)'
        )
    });

    db.transaction((tx) => {
        tx.executeSql(
            "SELECT * FROM items",
            null,
            (txObj, resultSet) => {
                //setNoteArr(resultSet.rows._array);
                console.log(resultSet.rows._array);
            },
            (txObj, error) => console.log(error)
        );
    });
}

有人遇到过这个错误吗?如果是的话,分辨率是多少?

谢谢你。

reactjs react-native expo expo-sqlite
1个回答
0
投票

首先,对我部分有效的修复:

jest.mock('expo-sqlite'); // surprise! this sets up sqlite3 instead of non-functional mocking

在非捆绑场景中使用 expo-sqlite 时,例如直接在桌面操作系统中运行,没有与之关联的具体数据库。换句话说,他们没有在 expo 包装器下设置具体的数据库实现。

因此,当您调用

openDatabase(Sync|Async)
时,它会尝试调用本机数据库构造函数,但只找到没有自己的构造函数的基类。

expo 有自己的模拟实现,但只有当你要求 jest 模拟整个模块时才会加载。

这是该模拟的链接:github 链接(从 expo-sqlite v14 开始)

© www.soinside.com 2019 - 2024. All rights reserved.