【问题标题】:Stubbing a constructor with parameters using sinon使用 sinon 存根带有参数的构造函数
【发布时间】:2016-09-17 12:25:00
【问题描述】:

我有以下带有几个参数的构造函数。

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 创建一个 spy 实例,以验证当其中一个参数为空时是否引发异常?我看到了这个问题Mocking JavaScript constructor with Sinon.JS,但它是一个没有参数的构造函数。任何帮助将不胜感激。

【问题讨论】:

    标签: javascript unit-testing typescript sinon chai


    【解决方案1】:

    我不明白你为什么需要为此创建一个间谍?你应该可以像这样测试它:

    it('should throw if one of the parameters is empty', function() {
        expect(constructor.bind(null, null, mqttOptions, messageReceivedCallback)).to.throw(MyNodeError);
    }
    

    在示例中,url 参数设置为 null,我假设要定义变量 mqttOptionsmessageReceivedCallback(未显示)。

    例如,这反映了您正在寻找的内容(如果我正确理解了问题)并按预期工作:

    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);
    })
    

    【讨论】:

      【解决方案2】:

      试试下面的方法是否适合你!

      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");
          });
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-22
        • 2015-06-04
        • 2016-03-31
        • 2020-03-29
        • 2018-06-18
        • 1970-01-01
        • 2021-02-20
        • 1970-01-01
        相关资源
        最近更新 更多