Я пишу Node-приложение на TypeScript, которое запрашивает базу данных Postgres. В модульных тестах я не могу смоделировать функцию запроса.
Мой код модуля выглядит следующим образом:
class MyClass {
/* more stuff */
async validate(event: any): Promise<boolean> {
const client = new Client();
await client.connect();
const result = await client.query(`SELECT * FROM "user" WHERE "user_id" = '${user_id}'`);
console.log(
result
);
/* more logic */
}
}
Мой модульный тест выглядит следующим образом:
describe("...", () => {
sinon.stub(pg.Client.prototype, "connect").resolves();
let stub = sinon.stub(pg.Client.prototype, "query").withArgs(
`SELECT * FROM "user" WHERE "user_id" = '1234'`,
sinon.match.any,
sinon.match.any
).resolves("asdf");
it("...", () => {
await myClassInstance.validate(event);
});
});
Не говоря уже о тестовых ожиданиях, я бы сказал, что на консоли напечатано «asdf». Но я не знаю!
Я попытался полностью удалить .withArgs(...)
, и тогда я вижу «asdf». (Но, очевидно, это не очень помогает ...)
Я также пытался напечатать stub.lastCall
, и я вижу
args: [ `SELECT * FROM "user" WHERE "user_id" = 'user_with_verified_subscription'` ]
где-то тогда ...
Удаление двух sinon.match.any
сопоставителей также не помогает, потому что тогда компилятор TS жалуется, что Client.query
принимает 3 аргумента ...
Любая помощь очень ценится!
С уважением,
Макс