使用 sinon 对带有参数的构造函数进行存根
Stubbing a constructor with parameters using sinon
我有以下带有几个参数的构造函数。
constructor(url: string, mqttOptions: MqttOptions, messageReceivedCallBack: IMessageReceivedCallBack) {
if (!_.isString(url) || _.isEmpty(mqttOptions || _.isEmpty(messageReceivedCallBack))) {
throw new MyNodeError('invalid url value');
} else {
this.createConnection(url,mqttOptions);
}
}
如何使用 sinon 创建间谍实例以验证当其中一个参数为空时是否抛出异常?我看到了这个问题 但它是一个没有参数的构造函数。任何帮助将不胜感激。
我不明白你为什么需要为此创建间谍?你应该能够像这样测试它:
it('should throw if one of the parameters is empty', function() {
expect(constructor.bind(null, null, mqttOptions, messageReceivedCallback)).to.throw(MyNodeError);
}
在示例中,url
参数设置为 null
,我假设变量 mqttOptions
和 messageReceivedCallback
已定义(未显示)。
例如,这反映了您正在寻找的内容(如果我对问题的理解正确的话)并且按我的预期工作:
it.only('', function() {
function C(a) { if (!a) throw new TypeError('a was empty'); }
expect(C.bind(null, 'b')).to.not.throw(TypeError);
expect(C.bind(null, null)).to.throw(TypeError);
})
试试下面的方法是否适合你!
import {assert} from 'chai';
import MyNodeError from './path/to/MyNodeError'
import ClassToTest from './path/to/Class';
describe('MyClass', function() {
function test() {
new ClassToTest('', {}, null);
}
it("Should throw exception when invalid parameters passed", function(){
assert.throw(test, MyNodeError, "invalid url value");
});
});
我有以下带有几个参数的构造函数。
constructor(url: string, mqttOptions: MqttOptions, messageReceivedCallBack: IMessageReceivedCallBack) {
if (!_.isString(url) || _.isEmpty(mqttOptions || _.isEmpty(messageReceivedCallBack))) {
throw new MyNodeError('invalid url value');
} else {
this.createConnection(url,mqttOptions);
}
}
如何使用 sinon 创建间谍实例以验证当其中一个参数为空时是否抛出异常?我看到了这个问题
我不明白你为什么需要为此创建间谍?你应该能够像这样测试它:
it('should throw if one of the parameters is empty', function() {
expect(constructor.bind(null, null, mqttOptions, messageReceivedCallback)).to.throw(MyNodeError);
}
在示例中,url
参数设置为 null
,我假设变量 mqttOptions
和 messageReceivedCallback
已定义(未显示)。
例如,这反映了您正在寻找的内容(如果我对问题的理解正确的话)并且按我的预期工作:
it.only('', function() {
function C(a) { if (!a) throw new TypeError('a was empty'); }
expect(C.bind(null, 'b')).to.not.throw(TypeError);
expect(C.bind(null, null)).to.throw(TypeError);
})
试试下面的方法是否适合你!
import {assert} from 'chai';
import MyNodeError from './path/to/MyNodeError'
import ClassToTest from './path/to/Class';
describe('MyClass', function() {
function test() {
new ClassToTest('', {}, null);
}
it("Should throw exception when invalid parameters passed", function(){
assert.throw(test, MyNodeError, "invalid url value");
});
});