javascript - 使用 sinon 进行 Node 、单元测试和模拟

标签 javascript angularjs node.js unit-testing

所以我使用 Chai、rewire、sinon 和 sinon-chai 的测试套件来测试一些 Node 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");

拦截并 stub

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

然后运行

userRoles.get;

console.log(CrowdControl);

似乎 stub 没有被调用(它记录它是一个 stub ,但没有被调用)。我还希望也需要 stub crowdControl.get(),但是我试图首先让这个简单的部分工作。不知道我需要做些什么不同的事情才能让它在这里工作。这是我第一次在 Node 中进行单元测试,我已经在 Angular 中做了很多工作,我可以“模拟”CrowdControl,但我不确定它在 Node 中是如何工作的。

为了澄清,我只是检查 CrowControl 是否会被传入的变量调用,我应该 stub 它吗?但我也想模拟crowdControl,这样我就可以强制获取返回的内容。

编辑:这是我的第二次尝试: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;

关于javascript - 使用 sinon 进行 Node 、单元测试和模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29946121/

相关文章:

javascript - 制作 "scrolling"菜单

angularjs - 为什么 Angular 将 undefined 设置为空 ng-model 字段

javascript - 诗乃js AssertError : expected stub to be called once but was called 0 times

node.js - Protractor E2E - 您如何管理数据库?

node.js - Cloudinary 配置无效

javascript - Nest 无法解析 JwtService 的依赖关系

javascript - Zombie/Mocha browser.wait(...) 方法不执行。

javascript - 当用户退出浏览器时显示自定义对话框?

javascript - Angularjs 深度链接到视觉内容(如模态)

javascript - 使用 angular-ui-router 的页面标题、描述