2016-07-06 9 views
0

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

答えて

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と呼ばれています。このインポート行には、「node-sdk-js-browser ';」から「import {Node}」があります。ここで、Nodeは名前付きインポートです。そして、それはモジュールnode-sdk-js-browserからのものです。 Nodeコンストラクタは、私がスパイする必要があり、それが呼び出されたかどうかを確認するものです。これに合わせてその例を編集できますか?私はJavascriptを初めて使っているので、かなり混乱しています。( – mayooran

+0

あなたに私のコードを提供すれば(たとえ簡略化しても)私の例を更新することができます –

+0

私のコードメイトで質問を編集しました。 MessageBrokerクラスのm個の書き込みテスト。私は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);  
関連する問題