问题描述
我正在尝试编写测试,以确保使用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 (将#修改为@)