问题标签 [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 投票
1 回答
1965 浏览

javascript - 如何在 ES6 中监视命名导出的子函数

我想监视作为命名导出导出的子函数,但是,我们似乎无法监视它。

假设我有两个函数调用addmultiplyinoperations.js并将它们导出为命名导出:

并且测试文件用于sinon-chai尝试窥探该add功能:

结果是

但是,如果我像下面这样直接调用operations.add,它会通过测试:

似乎 sinon-spy 创建了一个新的引用,operations.add但该multiply函数仍然使用已经绑定的旧引用。

如果这些函数被命名为导出,那么监视add这个函数的函数的正确方法是什么?multiply

一般来说,如何监视一个被测试的父函数的子函数,它们都被命名为导出?

[更新]

multiply函数只是一个例子。我的主要观点是测试父函数是否调用子函数。但是,我不希望该测试依赖于子功能的实现。所以,我只想窥探子函数是否被调用。你可以想象multiply函数是registerMember函数,add函数是sendEmail函数。(这两个函数都被命名为导出。)

0 投票
1 回答
527 浏览

typescript - 如何将模块(sinon,chai)公开为具有正确类型的全局变量?

在 Js 测试中,mochachaisinon通常暴露为全局变量以保存一些import,通常通过 karma 插件。

安装 mocha 类型很顺利, mocha describe, it... 正确地公开为具有正确类型的全局变量。

但是,尝试也将 chai 和 sinon 类型公开为全局 vars ( typings i --global --save-dev sinon) 会产生一个:

打字错误!消息试图将“sinon”编译为全局模块,但它看起来像一个外部模块。`

我试图自己编写一个类型文件,但我无权访问这些库类型(导入?)...

可能吗 ?我应该怎么做?它会与 sinon-chai 一起使用吗?

0 投票
2 回答
799 浏览

reactjs - Expect method to have been called is not fulfilled on "onInput" for a contentEditable element

I have a component that uses contentEditable as an input method. The part from the component that is of interest is:

The component works fine - it gets into the textChanged method on user input. The method looks like this:

The problem I'm facing appears when I try to test the input behavior. The setup is done with enzyme, chai, sinon. I'm rendering the component using a simple renderComponent function, using enzyme's mount method.

It outputs expected textChanged to have been called at least once, but it was never called. The weird part is, however, if I put a console.log inside the component's method, it gets there.

What I've tried to make it work

  • use sinon.stub instead of spy, as I though that maybe something in my method doesn't work properly
  • call it with view.find('.user-input').simulate('input', {target: {value: "lorem"}) or .simulate('input', {key: 'a'})

If instead of simulating the input I do a viewReact.textChanged(), it obviously works.

I'm guessing that it's the input method on contentEditable that's causing this. Any suggestions? How can I properly enter text in the onInput method? (even if it gets in the textChanged method, the text is empty)

0 投票
1 回答
45 浏览

node.js - Mohca 测试失败

我需要在 debug = false 时测试 storeDocument 函数,该函数将调用 createStorageDocument。但是对于我下面的测试代码给出了一个错误'TypeError: Attempted to wrap undefined property createStorageDocument as function'

我究竟做错了什么 ?

而且我更喜欢在 createStorageDocument 函数中存根提取的解决方案,而不是 createStorageDocument 本身,有人可以解释一下怎么做吗?我对 mocha 和 node.js 很陌生

0 投票
2 回答
884 浏览

javascript - Chrome 扩展单元测试用 Sinon 抛出“不安全评估”

我正在使用 mocha、chai 和 sinon 对我的 chrome 扩展进行单元测试。当我尝试从方法中存根对象时,我得到:

test-runner.html

http://pastebin.com/ij5kD2rY

任何帮助,将不胜感激。提前致谢。

0 投票
2 回答
1580 浏览

javascript - 如何验证使用 sinon 调用了构造函数

我需要断言是否使用 sinon 调用了构造函数。下面是我如何创建一个间谍。

但是我怎样才能验证这个构造函数是用相关参数调用的呢?下面是构造函数的实际调用方式。

任何帮助将非常感激。

下面是我的代码。

0 投票
1 回答
1031 浏览

unit-testing - 模拟使用箭头函数作为参数调用的方法

如何使用 Sinon 包存根/模拟方法调用,其中使用箭头函数调用我必须模拟的参数之一?例如

我在 sinon 文档中找不到任何东西,也没有在谷歌搜索几次尝试后找到任何东西。

0 投票
2 回答
341 浏览

javascript - “this”引用在 nodeJs 中不起作用

我的 nodeJs 代码中有两种方法,例如

使用方法1测试功能SinonMocha我必须使用stub方法2。为此,它需要将方法 method2 称为

为此的测试代码

使用此测试用例通过,但代码停止工作并出现错误this.method2 is not a function。

有什么办法可以摆脱thismodule.exports看起来有问题。

如果我错过任何其他信息,请告诉我..

0 投票
1 回答
889 浏览

node.js - 如何让 sinon 存根在第 n 次调用时调用另一个函数

我想使用 sinon 存根来异步测试事件发射器。我希望存根在调用后调用回调。

我以为stub.yields是我想要的,但不是。有没有一种巧妙的方法来做到这一点?

目前,我正在做这样的事情......

它工作得很好,但是,我需要概括它,我认为我可以用 sinon 更有效地做到这一点。但我无法从 sinon docs 中弄清楚如何做到这一点。我错过了什么吗?


感谢罗伯特克莱普,这是解决方案......

0 投票
2 回答
966 浏览

unit-testing - 酶:BrowserHistory 函数测试失败

我对单元测试相当陌生。我正在使用 react+redux 并且我已经创建了一个NotFound页面/组件并且我正在编写它的单元测试。我需要测试一个失败的 onClick 事件。

404.jsx

测试.js

即使这样,它也会给我一个错误Cannot read property 'goBack' of undefined

先感谢您。