【发布时间】:2016-12-29 17:41:08
【问题描述】:
我有一个Manager,它大量使用serialport 模块,并希望使用模拟版本的串行端口运行单元测试。我重写了我的管理器模块以利用依赖注入:
// file: manager.js
function Manager(SerialPort, device, baudRate) {
this._device = device;
this._serialPort = new SerialPort(device, {autoOpen: false, baudRate: baudRate })
};
Manager.prototype.constructor = Manager;
现在我想测试一下是否将正确的参数传递给new SerialPort() 调用。我被困在如何正确地存根/模拟构造函数。到目前为止,这是我所拥有的:
// file: manager-test.js
function MockSerialPort(device, options) {}
describe('Manager', function() {
describe('constructor', function() {
it('instantiates a serial port with correct baud rate', function() {
const manager = new Manager(MockSerialPort, '/dev/tty', 9600);
expect(<something>).to.be.calledWith('/dev/tty', {autoOpen: false, baudRate: 9600});
});
});
});
显然我有几个洞
在我的脑海里,哎呀,我的意思是
在我的代码中。我需要填写什么测试?
更新
正如@cdhowie 指出的那样,如果我可以将实例化的 SerialPort 对象传递给 Manager,生活会更轻松。由于一些误导性的文档,我认为 SerialPort API 不可能做到这一点,但在他的帮助下,现在的实现看起来像:
function Manager(serialPort) {
this._serialPort = serialPort;
}
Manager.prototype.constructor = Manager;
这意味着在我的测试中,我只是创建了一个看起来像 SerialPort 对象一样的东西。存根和监视就变得微不足道了。
【问题讨论】:
标签: javascript node.js mocha.js sinon chai