问题标签 [sinon-chai]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
597 浏览

javascript - 全局函数上的 sinon 存根

我尝试存根任何全局函数:(function randomNumber(min, max){/*...*/}window.randomNumber === randomNumber但是当我在测试用例中创建存根sinon.stub(window, 'randomNumber')并模拟结果randomNumber.returns(1);)时它不起作用并调用原始的'randomNumber'(window.randomNumber !== randomNumber),为什么?


[编辑]

我的部分代码:https ://plnkr.co/edit/GAaxA3iN8QehDN7HbOc8?p=preview (有趣的是它在浏览器中,在控制台中运行undefined is not a function (evaluating 'randomNumber.onCall(0)'))和package.json

"chai": "^3.5.0", "karma": "^1.7.0", "karma-mocha": "^1.3.0", "karma-phantomjs-launcher": "^1.0.4", "karma-sinon-chai": "^1.3.1", "mocha": "^3.4.1", "phantomjs-prebuilt": "^2.1.14", "sinon": "^2.2.0", "sinon-chai": "^2.10.0", "sinon-stub-promise": "^4.0.0"

0 投票
1 回答
453 浏览

backbone.js - 使用 Karma 和 Sinon 时,如何测试绑定到事件总线的 Backbone 模型的方法是否已触发?

当测试一个主干模型的事件已经被 sinon spy 触发时,它错误地错误:expected doSomething to be called once but was called 0 times,即使它似乎在控制台日志被放入方法的主体时执行。测试功能如下:

我知道要修复,您必须像const spy = sinon.spy(Model.prototype, 'doSomething');new Model()调用之前的行中一样将 sinon spy 放在模型的原型上,但是在放入模型实例时它似乎可以正常工作,如下所示:

好奇为什么它需要在第一个实例中放置在模型的原型上,但在第二个实例上工作?

0 投票
1 回答
3324 浏览

unit-testing - Firebase 的 Cloud Functions 单元测试:使用 sinon.js 测试/模拟“事务”的“正确方法”是什么

伙计,这个 firebase 单元测试真的让我很兴奋。

我已经阅读了文档并阅读了他们提供的示例,并对我的一些更基本的 Firebase 功能进行了单元测试,但我一直遇到一些问题,我不确定如何验证该transactionUpdated功能是否传递给refs.transaction正确地更新了current对象。

我的挣扎可能最好用他们的child-count示例代码和我为它编写单元测试的糟糕尝试来说明。

假设我要进行单元测试的函数执行以下操作(直接取自上面的链接):

单元测试代码:

我用我的问题注释了上面的源代码,但我会在这里重申。

我如何验证传递给事务存根的transactionUpdate回调startingValue是否会接受我的并将其变异为expectedValue然后允许我观察该更改并断言它发生了。

这可能是一个非常简单的问题,有一个明显的解决方案,但我对测试 JS 代码非常陌生,因为所有东西都必须被存根,所以它有点学习曲线......感谢任何帮助。

0 投票
0 回答
190 浏览

sails.js - 使用 sinon 存根模拟 mocha 测试用例中来自sails.js 控制器的数据

我在一个控制器中有一个函数调用另一个控制器来获取用户会话。我应该如何使用 sinon stub 或 sinon mock 来模拟数据,这样我才能确保Service.USER_ID != uID用户 controller.js

0 投票
1 回答
541 浏览

javascript - 摩卡中的诗农存根不工作

我正在努力解决一个非常微不足道的问题。我能够在所有依赖包中存根函数,它工作得很好,但是当我尝试存根我自己的函数时,我似乎无法让它工作。请参阅以下简单示例:

测试.js

index.js

0 投票
3 回答
546 浏览

javascript - sinonjs 中 jasmine.createSpy().and.callFake(fn) 的等价物是什么

我正在寻找jasmine.createSpy().and.callFake(fn)在 sinonjs 中的等价物。

例如:

0 投票
1 回答
1061 浏览

javascript - 使用带有 Promise 的 sinon 进行单元测试

我有一个函数返回一个Promise包裹另一个函数的函数,该函数与它自己的承诺/回调实现一起使用,如下所示:

编辑:我可以将上述函数重写为:

我不知道如何对这样的东西进行单元测试?我尝试stub使用Serviceandsinon来检查它是否被调用,但以下方法不起作用:

任何帮助,将不胜感激。

0 投票
1 回答
129 浏览

javascript - 使用 Sinon.JS 测试函数链

如何使用 Sinon.JS 测试如下函数?

我尝试执行以下操作,但无济于事:

基本上来自keycloak-js的 Keycloak 是一个 IIFE,但即使在尝试在窗口Keycloak引用上存根对象之后,我也无法使其工作。

0 投票
1 回答
18862 浏览

javascript - 调用 calledOnce 时 Chai 属性无效

我在用 Sinon 和 Chai 编写 JavaScript 测试时遇到问题。我正在尝试检查是否在间谍上调用了一个函数并得到了

“错误:无效的 Chai 属性:calledOnce”

我在另一个具有相同测试依赖项的项目中做同样的事情,没有任何问题。

0 投票
2 回答
585 浏览

javascript - 在 Promise 链末尾测试回调调用

我正在处理混合节点样式回调和 Bluebird 承诺的代码,我需要为它编写一些单元测试。

特别是,cache.js公开了init()与 Promise 一起使用的函数。然后它被doSomething()另一个文件(例如index.js)中的函数调用,该文件又接受必须在init().

伪代码如下:

可能的单元测试可能是(仅显示相关代码):

该测试通过,但是将期望更改为not.have.been.calledOnce也通过,这是错误的。

此外,控制台日志乱序:

我研究了几种可能性,但都没有奏效:

  • 使用 chai-as-promised,例如expect(callback).to.eventually.have.been.calledOnce;

  • 重构doSomething()简单:

    函数 doSomething(callback) { cache.init() .asCallback(callback); }

谁能帮我理解我做错了什么以及如何解决它?