用Jest测试sqlite3:如何对序列化方法进行断言?

问题描述

我正在尝试编写测试,以确保使用INSERT INTO TestSistem.Attendance (DayDate,Presence,StudentId,TeacherId) VALUES ('2020-10-25 21:09:57',1,4,3),('2020-10-25 21:09:57',3,3); 库使方法正确运行sql代码

被测方法如下:

int

我想做的是确保使用正确的sqlite3代码调用setup_db = async (db_path: string) => { //Create data directory if it doesn't exist if (!fs.existsSync(path.join(__dirname,"..","data"))) { fs.mkdirsync(path.join(__dirname,"data")); } //Get read/write connection to database const db = new sqlite3.Database(db_path); //Serialize context to make sure tables are created in order db.serialize(() => { //Create table1 db.run(` CREATE TABLE IF NOT EXISTS table1`); //Create table2 db.run(`CREATE TABLE IF NOT EXISTS table2`); }); }; 方法,因为那是该功能应该具有的主要作用。

我目前拥有的测试代码如下:

run

我从此测试中得到的结果是sql尚未被调用。我认为有道理;由于我嘲笑了import { DataManager } from "../../core/dataManager"; import sqlite3 from "sqlite3"; jest.mock("sqlite3"); const mockRun = jest.fn(); const mockSerialize = jest.fn(); class MockDatabase { db_path; constructor(db_path: string) { this.db_path = db_path; } serialize = mockSerialize; run = mockRun; } sqlite3.Database = MockDatabase as any; let manager: DataManager; const database_path: string = "path/to/database.db"; describe("datamanager.setup_db",() => { beforeEach(() => { jest.resetAllMocks(); manager = new DataManager(); manager.database_path = database_path; }); it("should create databases as needed",async () => { //Act await manager.setup_db(database_path); //Assert expect(mockSerialize).toHaveBeenCalled(); expect(mockRun).toHaveBeenCalled(); }); }); 的实现,因此它不会在其内部运行代码。但是我不知道如何让mockRun来运行代码-甚至我也无法做到。

我不确定此实现是否走正确的路,甚至不确定如何最好地模拟sqlite3进行测试。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)