如何验证构造函数是否是使用 sinon 调用的
How to verify that a constructor was called using 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);
}
}
给定以下代码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);
//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();
});
});
});
相关文章:
- 未调用 Sinon 存根
- Sinon Spy不使用Javascript调用或应用程序
- 在sinon中存根嵌套函数调用
- 使用 Sinon.js 测试一个函数是否调用 ES6 模块中的另一个函数
- 如何防止 sinon 间谍调用被监视的方法
- 不调用方法上的 Sinon.spy
- 如何使用sinon.stub()只执行某个调用
- 测试Backbone.js模型保存使用Sinon不调用成功回调
- 对$.ajax的调用没有从sinon.js fakeServer启动回调
- 如果间接调用spied方法,则不会调用Sinon Spy
- backbone.js点击事件间谍不会使用jasmine.js和sinon.js调用
- 在模块上使用sinon测试方法调用.出口的方法
- 用sinon存根在角控制器构造中调用的范围方法
- AJAX调用的Sinon超时
- EmberJs + Sinon Stub没有被正确的对象调用
- 如何在后续调用sinon.js stub时使用不同的函数
- 我如何测试Sinon.js函数调用的顺序
- 用Sinon Js测试事件触发后调用的回调
- 每次调用Sinon.stub()都会返回不同的值
- 如何验证构造函数是否是使用 sinon 调用的