【发布时间】:2021-11-07 12:52:06
【问题描述】:
我正在为以下文件编写单元测试用例
//filename: a.js
var amqp = require("amqplib");
class RMQ {
constructor(connectionURI) {
this.URI = connectionURI;
}
async getInstance() {
var connection = await amqp.connect(this.URI);
this.connection = connection;
return connection;
}
}
const RMQ_INSTANCE = new RMQ(process.env.RMQ_URL);
module.exports = {
RMQ_INSTANCE,
};
我在下面的文件中使用实例RMQ_INSTANCE
// filename: b.js
const { RMQ_INSTANCE } = require("./a");
module.exports.publishEmail = async function(message) {
var connection = await RMQ_INSTANCE.getInstance();
var channel = await connection.createChannel();
var exchange = "some_exchange";
var key = "some_key";
var msg = JSON.stringify(message);
await channel.assertExchange(exchange, "topic", { durable: false });
await channel.publish(exchange, key, Buffer.from(msg));
setTimeout(function () {
connection.close();
}, 500);
}
我正在使用proxyrequire 模拟b.js 中的RMQ_INSTANCE
// filename: b.test.js
var proxyrequire = require("proxyquire").noCallThru();
var sinon = require("sinon");
const { assert } = require("sinon");
class fakeRMQClass {
constructor(connectionURI) {
this.URI = connectionURI;
}
async getInstance() {
var connection = getFakeRMQStub()
return connection;
}
}
var producerTest = function () {
it("producer connection - success test", async function () {
var fakeRMQInstance = new fakeRMQClass("fake_url");
var rmqUtils = proxyrequire("../path/to/b.js", {
"./a": fakeRMQInstance
});
await rmqUtils.publishEmail("fake_msg");
});
afterEach(function () {
sinon.verifyAndRestore();
});
};
describe("test_producer", producerTest);
但我看到模拟无法正常工作。谁能帮我正确地模拟一下?
【问题讨论】:
标签: javascript node.js unit-testing sinon