问题标签 [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 回答
1032 浏览

node.js - 在同一文件中定义的 Sinon 存根辅助方法

所以我有一个文件,user-database看起来像这样:

所以我正在使用 Sinon 为外部函数编写单元测试foo,因此我想存根它调用的函数,findSomething。我这样做如下:

当我运行测试时,我没有看到我告诉存根返回 this 的对象stub.returns(anObjectIPredefine)。相反,我实际上让函数findSomething正常执行并从 dB 中获取数据。有什么明显的我做错了吗?我唯一的猜测是,stub = sinon.stub(user_db, 'findSomething')对于在与被测试函数相同范围内定义的函数存根,这不是正确的语法。我找不到替代语法是什么。

0 投票
0 回答
113 浏览

javascript - 如何检查 $interval 是否在 sinon.js 中使用确切的参数调用

我想测试 $interval 的回调函数是否在一定时间间隔后被调用。但我得到的参数列表是空的。我不知道为什么。

下面是包含 $interval 的代码 -

下面是它的单元测试 -

0 投票
0 回答
310 浏览

node.js - 快速路线的诗浓存根不被调用

我目前正在一个 express webapp 上修补 sinon/mocha/chai。我正在尝试验证身份验证是否以这样的方式正常工作,即我让身份验证中间件正常运行并阻止请求,在另一次运行时,我存根中间件函数并让带有附加信息的请求通过。

基本上我的设置如下所示:

带有要存根的函数的helper.js

测试.js

在 express 网络应用 server.js 中

现在的问题是,第一个测试成功但第二个和 afterEach 断言都失败了,这表明存根没有正常工作。

在互联网上搜索时,我发现有人在做非常相似的事情,而且他的工作似乎很好。他的Github 回购

我完全错过了什么吗?

0 投票
0 回答
424 浏览

javascript - 用 sinon JS 存根整个模块

这是我正在处理的情况:

在 helpers.js 中

在 barActions.js 中:

我想用 mocha + sinon 测试 addActions.js。在测试中,我想对整个helpers模块进行存根:

但是,我必须先导入助手,然后再将其存根,并且问题出在哪里,我不断收到导入错误,因为助手从 utils 中导入了一些功能,这些功能是网络功能。我想知道在sinon 中是否有jest.mock('path-to-module', factory)等价物,其中 factory 是您自己的模拟实现?

0 投票
1 回答
1587 浏览

mysql - 如何使用 sinon 模拟承诺的 Mysql 数据以进行单元测试

是否可以使用 sinon for require('promise-mysql') npm 包在 NodeJS 中模拟承诺查询。由于 Sinon 允许我们模拟和/或存根对象上的方法。假设我想重写 createConnection() 方法,以便无论数据库设置是否正确,它都会返回一个有效对象,我会删除该方法。我可以使用require('mysql')具有回调的 npm 包来模拟它。

但是,由于require('promise-mysql')包返回承诺,我不确定如何模拟相同的测试数据。

对于require('mysql')包,这是完美的

我们怎样才能做到这一点require('promise-mysql');

0 投票
3 回答
4166 浏览

javascript - Sinon-chai 调用With(new Error()) 并带有确切消息

我需要测试这个功能:

这是我的测试功能:

对于我的断言,我使用的是sinon-chai语法。

尽管我预计它会失败,但该测试正在通过,因为我的代码不会抛出带有错误的消息。

如何测试错误是否引发了正确的消息?

0 投票
1 回答
722 浏览

mocha.js - useFakeTimers mocha chai sinon - 测试结果不正确

我正在尝试运行一个测试,我想验证我的帮助文件是否正确运行,如果我有一个过期的令牌,我会收到一个错误回扣并且无法继续。

我有一种感觉,我只能在测试中直接伪造时间,而不是在它之外。问题是,我不想在我的测试中复制 jwt.verify 函数,因为如果我更改实际帮助文件中的代码,那将达不到目的。对这个有帮助吗?

我在用诗乃假装时间。如果我测试一下我现在和时钟滴答后的时间,我确实得到了正确的结果。但由于某种原因,这不适用于另一个文件中的函数。

我的local.js文件

和我的测试文件

0 投票
0 回答
769 浏览

sinon-chai - Sinon-chai 期望 String 包含指定顺序的子字符串

sinon-chai 有没有办法测试一个字符串是否包含指定顺序的子字符串?就像是:

类似于sinon-chai-in-order对 spy 调用所做的事情。

我目前正在使用与此类似的正则表达式匹配:

最初,我正在执行以下操作,但是因为我不确定为什么它在换行符上不匹配:

然而,这些匹配有时很难阅读,而可读性是我使用 sinon-chai 的原因。

0 投票
1 回答
22979 浏览

javascript - Sinon.JS - 如何从存根中获取参数?

我正在尝试使用Sinon来测试一个看起来有点像这样的JS组件......

测试看起来像这样...

但是我无法越过这条线let bootboxAlertStub = Sinon.stub(Bootbox, 'alert');,因为我从 Karma 那里得到一个错误,说“应该包装对象的属性”。我也尝试将其包装在 Sinon.test 包装器中并使用 this.stub 但错误更加迟钝。

我已经浏览了 Sinon.JS 文档并在网上搜索过,但我被卡住了。代码工作正常。

我看过这篇类似的帖子 -使用 Sinon.js 存根一个类方法,但并不完全相同。

查看实际的底层引导箱 JavaScript 文件,我有效地尝试存根一个看起来有点像这样的方法(减少)......

然后 JS 文件最后返回导出...

查看一些 Github 帖子,似乎不可能对这些特定调用进行存根,因为底层调用是实用程序函数而不是对象函数。

我通过如下更改我的 Bootbox 包装类来缓解这种情况(以一种可怕的方式)......

这解决了一个问题并引入了另一个问题。虽然我现在可以存根 Bootbox,但当存根时,我无法获得论点....

(来自测试)

这令人沮丧 - 参数作为复杂参数传递,因此“调用的”断言不会削减它。

有什么方法可以让我获得存根的论点吗?

0 投票
1 回答
433 浏览

node.js - 使用 sinon 存根库构造函数调用

到目前为止,我一直在使用 sinon 来存根对我的 nodeJS 代码中包含的对象的函数调用。

例如,我使用请求库,因此在我的测试中我可以存根 http 调用,例如:

我现在遇到了一个场景,我所包含的库需要在我的实际代码中这样调用:

我希望能够存根pipe()对归档程序库的调用,但我认为我需要先存根构造函数调用 - archiver('zip')

我进行了搜索,我认为 sinon 的 createStubInstance 可以帮助我,但我不是 100% 确定。

有人可以帮忙吗?谢谢