繁体   English   中英

节点,使用sinon进行单元测试和模拟

[英]node, unit-testing and mocking with sinon

因此,我正在使用Chai,rewire,sinon和sinon-chai的测试套件来测试某些节点javascript。 这是我第一次尝试进行设置,因此可以使用一些指针。 我要测试的功能如下所示:

UserRoles.get = function(ccUrl, namespace, environment, ccToken, authPath) {
    var crowdControl = new CrowdControl(ccUrl, namespace, environment, ccToken, authPath);
    return q.Promise(function(resolve, reject) {
        crowdControl.get().then(resolve).fail(reject).done();
    });
};

在导出为UserRoles的文档中。 因此,我的初始设置工作正常,遇到麻烦时正在模拟测试此功能。 我正在尝试模拟新的CrowdContol部分,因此我的尝试看起来像这样: https ://jsfiddle.net/d5dczyuk/。

所以我正在尝试

testHelpers.sinon.stub(CrowdControl, "UserRoles");

拦截和存根

var CrowdControl = require('./crowdcontrol');

然后就跑

userRoles.get;

console.log(CrowdControl);

似乎未调用存根(它记录它是存根,但未调用它)。 我也同样希望也需要打败pullControl.get(),但是我试图首先让这个简单的部分开始工作。 不知道我需要做些什么来使它在这里工作。 这是我第一次在节点中进行单元测试,我在角度上做了很多工作,可以“模拟” CrowdControl,但是我不确定它如何在节点中工作。

只是为了澄清一下,我只是在检查是否将通过传入的var调用CrowControl,我是否应该将其存根? 但是我也想嘲笑一下crowdControl,这样我就可以强制get得到什么。

编辑:这是我的第二次尝试: https : //jsfiddle.net/5m5jwk5q/

我喜欢使用proxyquire进行这种测试。 使用proxyquire,您可以从要测试的模块中找出需要的依赖项。 因此,您可以执行以下操作:

var crowdControlSpy = sinon.spy();

// Makes sure that when ./user-roles tries to require ./crowdcontrol
// our controlled spy is passed, instead of the actual module.
var UserRoles = proxyquire('./user-roles', {
    './crowdcontrol': crowdControlSpy
});

UserRoles.get(...);
expect(crowdControlSpy).to.have.been.called;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM