问题标签 [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.
jquery - 如何使用 Sinon 和 QUnit 对 $(function () { ... }) 块进行单元测试?
我在一个 JS 文件中有这样的代码(当然是简化的):
我需要编写两个单元测试:
- 确保脚本在页面加载时向服务器发送
./getNumber.php
请求 - 确保
#id
单击时num
会收到警报。
显然我需要 FakeXmlHTTPRequest 并模拟该alert
函数,甚至可以监视$.getJSON
. 但是我不确定在保持两个原子的同时编写测试的正确方法是什么。
我认为这样做的唯一方法是<script>
为每个测试动态注入块;但我只是觉得那是不对的。什么是正确的方法?谢谢。
编辑:基于 SO 之外的评论,我需要学习的是编写可测试的 Javascript,而不是尝试为低可测试性的东西提出测试用例。如果有人可以给我一些关于重写此代码的建议,我将不胜感激。
backbone.js - 在主干视图初始化中调用的 Sinon spy 方法
我在 Backbone 的 View 初始化方法中执行了一个方法。
我正在尝试使用 sinon 来监视这种方法,例如:
然后结束
但测试失败...
有任何想法吗?
ajax - Testing ajax jasmine sinon
I'm getting 'Expected Function to be called'.
How do I test Ajax success methods successfully?
javascript - undefined|0|ReferenceError:严格模式禁止隐式创建全局属性“csrf_token”
所以,这是我一直遇到的一个非常有趣的问题。
我目前正在构建一个backbone.js - Rails 应用程序。通常只是为了学习目的而构建它。我(就像任何优秀的 Rails 开发人员一样)在 TDD/BDD 方面做得最好,但我遇到了水豚的问题。
我有一个仅测试 root_path 工作的集成规范(主干历史开始,显示初始信息等......)。
我正在使用 jasmine、sinon 和 capybara/rspec/webkit 运行测试。我大致遵循thoughtbot的“Rspec on Rails”书(顺便说一句很棒的书)和本教程:http ://tinnedfruit.com/2011/03/03/testing-backbone-apps-with-jasmine- sinon.html。
运行上述规范时,我遇到了这个错误:
我花了很长时间来解决这个问题,因为这个错误真的没有谷歌可以解决的问题。
最终我偶然发现在 JS 中使用“使用严格模式”。本质上,这将使用一些新的 EMCA5 脚本约定。它将捕获更多的编码漏洞,并阻止您访问全局变量。所有美好的事物。
所以我检查了一下,在我的 sinon.js 文件中,我看到:
在文件的第 36 行。瞧,我注释掉了这条线,我的测试工作得很好。
这是我的问题:为什么要使用严格的 csrf?我假设这与我的 rails 布局中的 csrf_meta_tags 有关。如果可能的话,我想把这条线放回 sinon js,因为我认为它是“正确的做法”
有没有人有这方面的更多信息?我提前感谢任何细节!
node.js - 类似路线的超测和多次执行
我正在尝试测试两条几乎相同的路线,除了其中一条更具体,因为最新的 url 段是硬编码值(编辑),而另一条有参数(:slug)。
我遇到的问题是,当请求被执行时,它会调用两条路由(编辑,显示)导致我的模拟 never() 期望永远不会通过:(
难道我做错了什么?如果其中一条路线更具体,我不明白为什么两条路线都在执行...
这是测试:
这是我在上面嘲笑的users-controlle.js :
jquery - jasmine sinon 同步ajax调用导致死循环
我正在使用 jasmine 进行单元测试,并使用 sinon 来模拟 ajax 调用。但是,这会导致我的测试用例被重复调用的无限循环。ajax 调用是同步进行的。如果我将 ajax 调用更改为异步,则不会发生无限循环。任何帮助或指示将不胜感激!
这是带有ajax调用的函数:
这是我的测试用例:
javascript - Qunit+SinonJs spy.calledOnce in setTimeout 未定义
我无法理解 sinonjs 间谍的行为。
这是我的测试:
使用 qunit 和 sinonjs(通过 sinon-qunit)运行上述测试,我通过了断言 1,但断言 2 失败(在 setTimeout 回调中)。事实上,当我们pApi.product.calledOnce
在控制台中记录 的值时(通过断言的消息完成),它是undefined
.
注意:我的测试文件顶部有这个:
谁能解释这种奇怪的行为?不应该pApi.product
在 setTimeout 回调中并且没有两者都calledOnce
作为间谍的有效属性吗?
更新
基于http://api.qunitjs.com/asyncTest/,我弄清楚了为什么会显示上述行为。
asyncTest
start()
在调用函数之前不会运行 testrunner 。当我更改this.spy(pApi, 'product')
为sinon.spy(pApi, 'product')
. 显然,是否test
使用 is 而不是asyncTest
,这会影响该this.spy
方法的运行时间。
需要实际查看 sinon、qunit 和 sinon-qunit 代码才能弄清楚这一点。
javascript - Ember 中带有 Sinon 的假服务器
我想测试我的控制器,它对我的后端进行 ajax 调用。所以我想用茉莉和诗乃。为了用 sinon 伪造我的后端服务器,我尝试了这样的方法:
我的控制器如下所示:
有人可以告诉我如何运行它吗?
javascript - 我应该在 sinon.js 中模拟 cors OPTIONS 请求还是如何测试跨域 ajax 请求?
我正在为我正在处理的 javascript/jquery 库创建单元测试。我需要发出很多跨域 Ajax 请求,并试图通过Sinon.js来尝试模拟以下场景:
- 我做了一个 AJAX“PUT”跨域请求
x-domain-abc.com/somestorage
- 我包含用于身份验证的自定义标头
- 这将触发预检 OPTIONS 请求
- 请求应该被 fakeServer 捕获并以一些自定义标头响应(我希望我的提供者添加的标头 ;-)
- 之后实际的“PUT”完成,也被 fakeServer 捕获并做出相应的响应。
我的请求如下所示:
在我的测试模块中,我目前正在这样做:
O
包括:
问题:
测试 OPTIONS/preflight 是否有意义,因为它是由浏览器内部处理的东西,我无法访问或影响?
如果不是,我应该对 CORS 请求进行什么测试?
node.js - Express.js 应用程序的单元测试与集成测试
我正在为 Express.js 应用程序编写测试,但我不知道如何在单元测试和集成测试之间进行选择。
目前我尝试过:
单元测试 - 使用 Sinon 进行 stubs/mocks/spies 和 Injects 对模块的依赖注入。使用这种方法,我必须对 MongoDB 和其他外部方法进行存根。
我考虑过对各个路由进行单元测试,然后使用集成测试来验证是否实际调用了正确的路由。
集成测试 - 使用 Supertest 和 Superagent,编写的代码要少得多(无需模拟/存根),但应该存在测试环境(数据库等)
我正在使用 Mocha 来运行两种类型的测试。
我应该如何在这两种不同的方法之间进行选择?