node.js - Javascript nodeJs Postgres pg ერთეულების ტესტი
მე ვიყენებ PG ბიბლიოთეკას Postgres DB-სთან დასაკავშირებლად,
ახლა მინდა დავწერო ერთეულების ტესტები მონაცემთა ბაზასთან წვდომისთვის და არ ვიცი, როგორ შემიძლია ეს გავაკეთო. ფაქტობრივად, მჭირდება რომელიმე მექანიკური Postgres სერვერი ან რამე ისეთი, რომ შევძლო Postgres-ის მექანიკურ ვერსიას გამოყენება.
მე ვიყენებ Mocha ტესტირებისთვის
ქვემოთ არის ერთი ჩემი კლასი მონაცემთა ბაზაზე წვდომისთვის
import { Pool } from "pg";
export class DbAccess implements IdbAccess {
private static readonly postgres = new Pool();
constructor(@inject(TYPES.ILogger) private readonly logger: ILogger) {}
public saveConsumer(consumer: IAPIGWConsumer): Promise<IAPIGWConsumer> {
return this.queryOne`
INSERT INTO users (consumer_id, email)
VALUES (${consumer.consumer_id}, ${consumer.email})
ON CONFLICT (consumer_id) DO UPDATE SET email = ${consumer.email}
RETURNING *
`;
}
}
მოვიხდი მადლობას ნებისმიერი დახმარებისთვის, გმადლობთ.
პასუხი #1
თუ გსურთ გააპაროტ ან მოახდინოთ სტუბირება რაიმე პაკეტზე/მეთოდზე/მოდულზე, საჭიროა დააინსტალიროთ მაოქ/სტუბ ლაიბრარიები როგორიცაა sinon.js, jest.js ამის მისაღწევად.
აქ არის ერთეულის ტესტის გადაწყვეტილება sinon.js-ის გამოყენებით. სიმარტივისა და სისუფთავისთვის, მე გამოვკვეთე არასაჭირო ნაწილები, როგორიცაა DI.
db.ts:
import { Pool } from "pg";
export class DbAccess {
private static readonly postgres = new Pool();
public saveConsumer(consumer) {
return DbAccess.postgres.query(`
INSERT INTO users (consumer_id, email)
VALUES (${consumer.consumer_id}, ${consumer.email})
ON CONFLICT (consumer_id) DO UPDATE SET email = ${consumer.email}
RETURNING *
`);
}
}
db.test.ts:
import pg from "pg";
import sinon from "sinon";
import { expect } from "chai";
describe("59624370", () => {
afterEach(() => {
sinon.restore();
});
it("should pass", async () => {
const mPool = { query: sinon.stub().resolves({ rows: [] }) };
const poolStub = sinon.stub(pg, "Pool").callsFake(() => mPool);
const { DbAccess } = require("./db");
const db = new DbAccess();
const consumer = { consumer_id: 1, email: "[email " };
const actual = await db.saveConsumer(consumer);
expect(actual).to.be.eql({ rows: [] });
sinon.assert.calledOnce(poolStub);
sinon.assert.calledOnce(mPool.query);
});
});
უნიტ ტესტის შედეგები დაფარვის ანგარიშით:
59624370
✓ should pass (132ms)
1 passing (141ms)
------------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
------------|----------|----------|----------|----------|-------------------|
All files | 100 | 100 | 100 | 100 | |
db.test.ts | 100 | 100 | 100 | 100 | |
db.ts | 100 | 100 | 100 | 100 | |
------------|----------|----------|----------|----------|-------------------|
წყარო კოდი: https://github.com/mrdulin/mocha-chai-sinon-codelab/tree/master/src/stackoverflow/59624370
