2016-07-06 2 views
0

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

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

ответ

0
//module.js 
var Node = require('node-sdk-js-browser').Node; 

function MessageBroker(url) { 
    this.node = new Node(url, 'foo', 'bar'); 
} 

module.exports.MessageBroker = MessageBroker; 

//module.test.js 
var sinon = require('sinon'); 
var rewire = require('rewire'); 
var myModule = require('./module'); 
var MessageBroker = myModule.MessageBroker; 

require('should'); 
require('should-sinon'); 

describe('module.test', function() { 
    describe('MessageBroker', function() { 
    it('constructor', function() { 
     var spy = sinon.spy(); 
     var nodeSdkMock = { 
     Node: spy 
     }; 
     var revert = myModule.__set__('node-sdk-js-browser', nodeSdkMock); 

     new MessageBroker('url'); 

     spy.should.be.calledWith('url', 'foo', 'bar'); 
     revert(); 
    }); 
    }); 
}); 
+0

эй приятель, мой класс, который должен быть тестируемый называемый MessageBroker. Он имеет эту строку импорта: «import {Node] из« node-sdk-js-browser »;». Здесь Node - это именованный импорт. И его выход из модуля node-sdk-js-browser. Конструктор узла - это то, что мне нужно, чтобы шпионить и проверить, был ли он вызван. Можете ли вы отредактировать этот пример для этого? Поскольку я новичок в Javascript, это довольно запутанно :( – mayooran

+0

Он должен предоставить вам общую идею: если вы предоставите мне код (даже упрощенный), я могу обновить свой пример. –

+0

Я отредактировал вопрос с помощью моего кода. m писать тесты для класса MEssageBroker. Мне нужно проверить, что конструктор Node был вызван, когда я вызываю конструктор MessageBroker. Было бы здорово, если бы вы могли помочь мне с примером для этого :( – mayooran

0

Учитывая следующий код 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);  
Смежные вопросы