问题标签 [sinon]

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 投票
2 回答
1452 浏览

jquery - 使用 sinon.js 测试 jQuery 延迟对象的“完成”回调函数

我在我的一个主干视图中有这段 CoffeeScript 代码:

我想测试 myCallback 在 done 块中是否被调用。

我不确定如何在 Mocha.js + Sinon.js 中执行此操作。我能够监视 jquery 并检查是否调用了 when 方法:

但是我不能对 done 块做同样的事情,因为如果我理解正确的话,它与 when 方法返回的延迟对象有关。

我也尝试过这样的事情:

但仍然得到:

有任何想法吗?:)

0 投票
1 回答
2129 浏览

jquery - spy 和 stub 有什么区别?

我刚刚开始使用sinon.js,我完全被这些术语难住了。我在subview's渲染方法中使用了存根。但是间谍的解释对我来说并不清楚。谁能解释这两者之间到底有什么区别?

还想知道如果我想测试一个新模型是否已添加到集合中,该方法是什么?

0 投票
9 回答
82077 浏览

javascript - Javascript:使用 Sinon 模拟构造函数

我正在努力弄清楚如何使用 sinon 来模拟构造函数。我有一个函数,它将通过调用一个接受一些参数的构造函数来创建多个小部件。我想验证构造函数是否使用正确的参数被调用了正确的次数,但我不想实际构造小部件。以下链接似乎解释了一种模拟构造函数的简单方法,但它对我不起作用:

使用 Jasmine 监视构造函数

http://tinnedfruit.com/2011/03/25/testing-backbone-apps-with-jasmine-sinon-2.html

当我对构造函数进行以下调用时:

我收到以下错误:

在 Chrome 中调试时,我看到 MyWidget 出现在 Scope Variables 的 Local 部分中,但是窗口中没有 MyWidget 属性。

任何帮助将不胜感激。

0 投票
1 回答
3806 浏览

javascript - 如何将 Sinon.JS 间谍函数指定为类定义的一部分?

我正在使用 Require.js 和 Backbone.Marionette 编写一个 Backbone.js 应用程序,并使用带有 Chai、Sinon 和 Sinon-Chai 的 Mocha 对其进行测试。我通常使用Jarrod Overson 的 Backbone Marionette 和 Require.JS TODO 示例作为应用程序结构的参考,以及Jim Newbery 的关于测试 Backbone 应用程序的帖子作为单元测试的参考。

我的问题是尝试测试将Marionette ItemView添加到Marionette Application 对象。我想测试是否添加了 ItemView 的最佳方法是观察它的render()方法是否被调用。由于 Marionette 提供了默认render()实现,我认为最好只使用 Sinon spy 进行onRender()回调。

我使用Squire.JS为我的 ItemView 返回一个存根类,如下所示:

当我通过 Chrome 运行 Mocha 时,我得到了我期望的错误:“预计 spy 至少被调用过一次,但它从未被调用过。” 但是,如果我指定Sinon spy函数作为onRender()回调,如下图

我收到一条错误消息,指出该called()方法不是函数。

有没有办法将 Sinon 间谍函数指定为类定义中的方法?或者,是否有更好的方法来测试此代码?我对 JavaScript 相当陌生,所以这可能是一个更普遍的问题,而不是特定于 Sinon 的问题。

任何帮助表示赞赏。

0 投票
0 回答
2264 浏览

html - 如何在 mocha 上使用 Sinon 模拟 input type="file" 进行 AJAX 测试

我在 Mocha 上进行了单元测试,并且正在通过 AJAX 测试表单提交。

由于您无法<input type="file">手动填写,并且我正在寻找自动化测试,我需要知道“模拟”此输入的最佳方法是什么,并且仍然能够通过 AJAX 以多部分格式发送它(可以是纯文本“文件”,如 Hello world!)。

我知道我可以手动制作字符串,但我需要<input type="file">用我的模拟“替换”对象中的值(它仍然可以响应我的模拟FormData对象)

0 投票
3 回答
17602 浏览

javascript - 用 sinon 监视 javascript 中的构造函数

我正在尝试在构造函数上创建一个间谍,看看它是否被调用——下面是我的测试。我使用的是 sinon-chai,所以语法是有效的,但是两个测试都失败了。

0 投票
1 回答
514 浏览

node.js - 我应该如何监视在另一个对象内部调用的构造函数?

假设我有一个对象,该对象具有创建另一个对象作为其操作的一部分的函数。

Monkey 类在顶部有一个 require Paper.Origami

如果我在测试中创建一个 Origami,我可以通过这个测试,但如果我将它留给 Monkey 对象的 create 内部,它将不会通过。我怀疑这是因为两个对象之间的要求路径不同——也许节点不会将它们视为同一个对象。

问题:我可以让sinon间谍监视Origami对象内部发生的Monkey对象的创建吗?

0 投票
1 回答
391 浏览

node.js - 断言内部函数调用

我有一个foo.js看起来像这样的文件:

我想测试当我调用该start()函数时,会打开一个浏览器窗口。理想情况下,我想使用 Sinon 来存根exec(这样我们在自动化测试期间实际上不会打开浏览器窗口),并断言它exec被调用了。我尝试了很多方法,但都没有奏效。例如在foo_test.js

我该怎么做呢?

0 投票
3 回答
8462 浏览

javascript - 茉莉花需要sinon.js吗?

我在网上看到人们将jasminesinon一起使用的示例。但是,茉莉花支持间谍(据我所知,这是诗浓所做的)。那么问题来了,诗浓在使用 Jasmine 时还有用吗?如果诗浓有用,究竟是什么使它成为茉莉花的好补充?

干杯

0 投票
4 回答
10090 浏览

javascript - 使用 Sinon 在 Javascript 中测试私有成员

我开始编写一些 javascript 测试并试图找出检查模块构造函数的私有成员的最佳方法。例如,在下面的示例中,我使用显示模块模式将公共 api 公开给我的模块。我想测试在ajax 请求privateVar回调期间是否正确设置。$.getJSON

第二个测试it('should update privateVar', ...),不起作用,因为myModule.privateVar(故意)不在模块的公共 api 中。

所以,我的问题是,测试这种行为的最佳方法是什么,而不必使 privateVar 成为公共 api 的一部分?有没有更好的方法来考虑这个代码进行测试,或者可能有一种方法可以使用像 SinonJs 这样的东西来监视私人成员?