"Unexpected token 'export'"在测试使用 Node.js 模块的代码时,我试图模拟。我该如何解决这个问题?



我有一个TypeScript文件,如下所示:

import * as sqlite from expo-sqlite
class User {
static async getListOfUsers() {
}
}

这个";用户";class是要测试的类,sqlite模块是我试图模拟的。

正如关于mocking函数的Jest文档中所述,我在mocks目录中定义了一个mock类,该目录与node_modules(在(项目根目录(/-mocks/sq 中(相邻

我的jest.config.js文件如下:

module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
transformIgnorePatterns: ["node_modules/(?!(react-native|react-native-cookies)/)"]
};

奇怪的是,我在使用ts笑话之前也遇到了同样的错误。在将Jest配置为使用ts-Jest之后,我得到了与我的代码相关的错误,我可以修复这些错误,所以我认为这个错误已经消失了。

编辑:根据某人的要求,这是模拟文件。错误出现在该文件的第一行。

const sqlite = jest.createMockFromModule("expo-sqlite"); // The error occurs here.
const userQuery = "SELECT * FROM ZUSERENTITY";
const placeQuery = "SELECT * FROM ZPLACEENTITY WHERE ZUSER=";
export class MockResultSet
{
private length: number;
private items: {}[];
constructor (items: {}[])
{
this.items = items;
this.length = items.length;
}
}
export class MockTransaction {
executeSql(sql:string): MockResultSet
{
if (sql === userQuery)
{
return new MockResultSet([
{"ZNAME":"Montana","Z_PK":0,"ZNEXTLEVEL":0},
{"ZNAME":"Monty","Z_PK":1,"ZNEXTLEVEL":1}
]);
}
else if (sql === placeQuery)
{
return new MockResultSet([
{"ZUSER":"0","ZWORDFAMILYNUM":0,"ZACTIVITYNUM":0},
{"ZUSER":"1","ZWORDFAMILYNUM":1,"ZACTIVITYNUM":6}
]);
}
return new MockResultSet([]);
}
}
export type MockSQLError = {code: number, message:string,CONSTRAINT_ERR:number,DATABASE_ERR:number,QUOTA_ERR:number,SYNTAX_ERR:number,TIMEOUT_ERR:number,TOO_LARGE_ERR:number,UNKNOWN_ERR:number,VERSION_ERR:number};
export type MockSQLTransactionCallback = (transaction: MockTransaction)=>void;
export type MockSQLTransactionErrorCallback = (error: MockSQLError)=>void;
export class MockDatabase
{
transaction(callback: MockSQLTransactionCallback)
{
callback(new MockTransaction());
}
}
export function openDatabase(dbname:string)
{
return new MockDatabase();
}

是否尝试将依赖关系断言为jest。Mock,然后使用类似mockReturnValueOnce的jest-Mock函数

import * as sqlite from "expo-sqlite"
jest.mock("expo-sqlite")
describe("Your test", function () {
beforeEach(function () {
(sqlite.YOUR_FUNC_TO_MOCK as jest.Mock).mockReturnValueOnce(<YOUR_MOCKED_RETURN>)
})
})

使用mockReturnValueOnce而不是嘲笑实现是一种很好的做法,因为它的更改不会影响任何其他测试。

最新更新