Я пытаюсь заглушить функцию getDB в классе Connection, который является одноэлементным. Когда я делаю модульный тест для класса B, он работает нормально. Теперь я пытаюсь создать тест компонента, что означает использование класса A и снова заглушку функции getDB (класс A использует класс B, который использует класс соединения - getDb). Но заглушка не работает. Не уверен, почему.
Вот классы:
Class Connection
"use strict";
const config = {};
const pgp = require("pg-promise")();
const db = pgp(config);
class Connection {
constructor() {
console.log("Connection ctor")
}
getDb() {
console.log("getDb")
return db;
}
}
module.exports = new Connection();
Class B
"use strict";
class B {
constructor() {
console.log("B ctor")
this.db = require("./Connection").getDb();
}
async getDataFromDb() {
console.log("B getDataFromDb")
let res = null;
res = await this.db.one("SELECT guid FROM table", ["NONE"]);
return res.guid;
}
}
module.exports = B;
Class A
"use strict";
const bDao = new (require("../db/B"))();
class A {
async getGuid() {
console.log("A getGuid")
let guid = await bDao.getDataFromDb();
console.log("got guid " + guid);
return guid;
}
}
module.exports = A;
The Test - B_unit_test работает, но когда я пытаюсь заглушить getDb из класса подключения, это не так. 'не заглушить его, и component_test завершится неудачно.
const chai = require("chai");
const expect = chai.expect;
const A = require("../src/service/A");
const Connection = require("../src/db/Connection");
const B = require("../src/db/B");
const sinon = require("sinon");
describe("component_test", function () {
before(() => {
var db = {
one: async () => {
return {
guid: '24f475b6-f9fa-495b-83f4-16f6b45b0a6a',
created_on: "123"
}
},
none: async () => {
}
};
this.dbStub = sinon.stub(Connection, "getDb").returns(db);
});
after(() => {
this.dbStub.restore();
});
it("B_unit_test", async function () {
var dao = new B();
var guid = await dao.getDataFromDb();
expect(guid).to.equal('24f475b6-f9fa-495b-83f4-16f6b45b0a6a');
});
it("A_component_test", async function () {
var dao = new A();
var guid = await dao.getGuid();
expect(guid).to.equal('24f475b6-f9fa-495b-83f4-16f6b45b0a6a');
});
});