Как проверить, что конструктор был вызван с помощью sinon

Мне нужно подтвердить, был ли конструктор вызван с помощью sinon. Ниже показано, как я могу создать шпиона.

let nodeStub: any;
nodeStub = this.createStubInstance("node");

Но как я могу проверить, что этот конструктор был вызван с соответствующими параметрами? Ниже показано, как на самом деле вызывается конструктор.

 node = new node("test",2);

Любая помощь приветствуется.

Ниже приведен код, который у меня есть.

import {Node} from 'node-sdk-js-browser';

export class MessageBroker {

    private node: Node;
    constructor(url: string, connectionParams: IConnectionParams) {
        this.node = new Node(url, this.mqttOptions, this.messageReceivedCallBack);
    }
}

person AnOldSoul    schedule 06.07.2016    source источник


Ответы (2)


Учитывая следующий код myClient.js:

const Foo = require('Foo');

module.exports = {
   doIt: () => {
      const f = new Foo("bar");
      f.doSomething();
  }
}

Вы можете написать такой тест:

const sandbox = sinon.sandbox.create();
const fooStub = {
   doSomething: sandbox.spy(),
}

const constructorStub = sandbox.stub().returns(fooStub);
const FooInitializer = sandbox.stub({}, 'constructor').callsFake(constructorStub);

// I use proxyquire to mock dependencies. Substitute in whatever you use here.
const client2 = proxyquire('./myClient', {
    'Foo': FooInitializer,
});

client2.doIt();

assert(constructorStub.calledWith("bar"));
assert(fooStub.doSomething.called);     
person steve    schedule 08.03.2018

person    schedule
comment
эй, приятель, мой класс, который нужно протестировать, называется MessageBroker. У него есть эта строка импорта, import {Node} from 'node-sdk-js-browser'; . Здесь Node — это именованный импорт. И это происходит из модуля node-sdk-js-browser. Конструктор узла — это то, что мне нужно, чтобы шпионить и проверять, был ли он вызван. Можете ли вы отредактировать этот пример, чтобы он соответствовал этому? Поскольку я новичок в Javascript, это довольно запутанно :( - person AnOldSoul; 09.07.2016
comment
Это должно дать вам общее представление. если вы предоставите мне код (даже упрощенный), я могу обновить свой пример. - person Alexey Kucherenko; 09.07.2016
comment
Я отредактировал вопрос с моим товарищем по коду. Пишу тесты для класса MEssageBroker. Мне нужно убедиться, что конструктор Node был вызван, когда я вызываю конструктор MessageBroker. Было бы здорово, если бы вы могли помочь мне с примером для этого :( - person AnOldSoul; 09.07.2016
comment
обновил мой пост, но написал его, используя es5 вместо es6 - person Alexey Kucherenko; 11.07.2016