当我使用 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)
);
});
}
有人遇到过这个错误吗?如果是的话,分辨率是多少?
谢谢你。
首先,对我部分有效的修复:
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 开始)