问题标签 [rspec]

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 投票
3 回答
2740 浏览

ruby-on-rails - 在 Rails 中使用 RSpec 测试扫地机

我想确保我的清扫器被适当地调用,所以我尝试添加如下内容:

但我只是得到:

我尝试在测试配置中打开缓存,但这没有任何区别。

0 投票
2 回答
3921 浏览

ruby-on-rails - 在 Rspec 的全局 before(:all) 中设置 HTTP_REFERER

为了避免添加

在我创建的每个 controller_spec 文件的 before 块中,我尝试将其添加到全局配置中(在 spec_helper.rb 中)

问题是,我收到以下错误:

有没有人关于如何正确实现这一点的任何指示?

干杯!

0 投票
1 回答
4470 浏览

ruby - RSpec 和 Open-URI 如何模拟引发 SocketError/TimeoutError

我希望能够指定当 Open-Uri open() 调用超时或引发异常(例如 SocketError)时,我正在按预期处理事情,但是我遇到了麻烦。

这是我的规范(针对 SocketError):

以及我使用 open-uri 的对象部分:

然而,在这种情况下,规范失败并出现nil.read错误。

这是本周我第二次遇到这个问题,上一次我试图在open()用 a包装时模拟 TimeoutError timeout() {},那次我放弃了,只是通过打开课程而导致实际超时发生。我显然可以通过尝试调用无效的 URL 来引发 SocketError,但我确信有一种正确的方法可以使用 RSpec 来模拟它。

更新:我显然没有在深夜想清楚,错误实际上是当我在 SocketError 之后重新尝试 URL 时,and_raise(SocketError) 部分工作正常。

0 投票
10 回答
38764 浏览

ruby-on-rails - 如何更改默认的“www.example.com”域以在 Rails 中进行测试?

我有一个 Rails 应用程序,它的行为取决于它访问的域(例如 www.myapp.com 将调用不同的 user.myapp.com)。在生产使用中,这一切正常,但我的测试代码总是看到“www.example.com”的主机名。

有没有一种干净的方式让测试指定它假装访问的主机名?

0 投票
5 回答
4479 浏览

ruby-on-rails - Ruby Object#id 警告和 Active Record

当我们运行我们的规范时,我们不断看到如下警告:

Object#id 将被弃用;使用对象#object_id

有问题的代码正在访问 ActiveRecord 模型的 id(显然,这是表上的一个属性,而不是 Ruby VM 中的对象实例 ID)。

有谁知道如何关闭这些特定警告或以某种方式避免它们?

0 投票
12 回答
3329 浏览

ruby - 随机生成测试数据是一种不好的做法吗?

自从我开始使用 rspec 以来,我一直对固定装置的概念有疑问。我主要担心的是:

  1. 我使用测试来揭示令人惊讶的行为。对于我正在测试的示例,我并不总是足够聪明地列举所有可能的边缘情况。使用硬编码的固定装置似乎是有限的,因为它只用我想象的非常具体的情况来测试我的代码。(诚​​然,我的想象力也限制了我测试的案例。)

  2. 我使用测试作为代码文档的一种形式。如果我有硬编码的夹具值,则很难揭示特定测试试图演示的内容。例如:

    使用第一种方法不会让读者知道最贵的物品是什么,只是它的价格是 100。这三种方法都要求读者相信灯具:expensive是列出的最贵的灯具fixtures/items.yml。粗心的程序员可能会通过创建一个Iteminbefore(:all)或将另一个夹具插入到fixtures/items.yml. 如果这是一个大文件,可能需要很长时间才能找出问题所在。

我开始做的一件事是#generate_random为我的所有模型添加一个方法。此方法仅在我运行规范时可用。例如:

(我如何做到这一点的具体细节实际上更简洁一些。我有一个处理所有模型的生成和清理的类,但这段代码对于我的示例来说已经足够清晰了。)所以在上面的示例中,我可以测试为跟随。对虚心的警告:我的代码严重依赖于使用before(:all)

这样,我的测试可以更好地揭示令人惊讶的行为。当我以这种方式生成数据时,我偶尔会偶然发现我的代码没有按预期运行的边缘情况,但如果我只使用固定装置,我就不会发现这种情况。例如,在 的情况下#most_expensive,如果我忘记处理多个项目共享最贵价格的特殊情况,我的测试偶尔会在第一次失败should。看到 AutoSpec 中的非确定性故障会提示我出了点问题。如果我只使用固定装置,发现这样的错误可能需要更长的时间。

我的测试在代码中演示预期的行为方面也做得更好。我的测试清楚地表明 sorted 是按价格降序排序的项目数组。由于我希望#most_expensive等于该数组的第一个元素,因此更明显的是预期的行为most_expensive是什么。

那么,这是一种不好的做法吗?我对固定装置的恐惧是非理性的吗?为每个模型写一个generate_random方法是不是工作量太大了?或者这行得通吗?

0 投票
3 回答
4840 浏览

ruby - RSpec Gem 似乎没有安装依赖项

$> jruby -v

jruby 1.1.4(ruby 1.8.6 补丁级别 114)(2008-08-28 rev 7570)[x86-java]

$> 宝石安装 rspec

JRuby 有限的 openss 已加载。gem install jruby-openssl 以获得全面支持。
http://wiki.jruby.org/wiki/JRuby_Builtin_OpenSSL
成功安装 rspec-1.1.12
1 个 gem 安装rspec-1.1.12
安装 ri 文档... rspec-1.1.12
安装 RDoc 文档...

$> 规范--帮助

.../jruby/1.1.4/lib/ruby/site_ruby/1.8/rubygems.rb:578:in `report_activate_error': 找不到 RubyGem 黄瓜 (>= 0.1.13) (Gem::LoadError)

来自 .../jruby/1.1.4/lib/ruby/site_ruby/1.8/rubygems.rb:134:在激活中' 来自 .../jruby/1.1.4/lib/ruby/site_ruby/1.8/rubygems.rb :157: 来自 .../jruby/1.1.4/lib/ruby/site_ruby/1.8/rubygems.rb:157: 在gem' 来自 .../jruby/1.1.4/bin/spec:18activate'
from .../jruby/1.1.4/lib/ruby/site_ruby/1.8/rubygems.rb:158: in

each
activate'
from .../jruby/1.1.4/lib/ruby/site_ruby/1.8/rubygems.rb:49: in

$> gem 安装黄瓜

(安装了 cucumber-0.1.16 和依赖项 term-ansicolor-1.0.3、polyglot-0.2.5、treettop-1.2.4、diff-lcs-1.1.2)

$> 规范--帮助

.../jruby/1.1.4/lib/ruby/site_ruby/1.8/rubygems.rb:578:in `report_activate_error': 找不到 RubyGem 锄头 (>= 1.8.0) (Gem::LoadError)

来自 .../jruby/1.1.4/lib/ruby/site_ruby/1.8/rubygems.rb:134:在激活中' 来自 .../jruby/1.1.4/lib/ruby/site_ruby/1.8/rubygems.rb :157: 在激活中 来自 .../jruby/1.1.4/lib/ruby/site_ruby/1.8/rubygems.rb:158: 在每个中 来自 .../jruby/1.1.4/lib/ruby/site_ruby /1.8/rubygems.rb:157:在激活中 来自 .../jruby/1.1.4/lib/ruby/site_ruby/1.8/rubygems.rb:157:在激活中 来自 .../jruby/1.1.4 /lib/ruby/site_ruby/1.8/rubygems.rb:158: 在每个' 中来自 .../jruby/1.1.4/lib/ruby/site_ruby/1.8/rubygems.rb:157: 在gem' 中来自 ... /jruby/1.1.4/bin/spec:18 activate'
from .../jruby/1.1.4/lib/ruby/site_ruby/1.8/rubygems.rb:158: in

each'
from .../jruby/1.1.4/lib/ruby/site_ruby/1.8/rubygems.rb:157: in

activate'
from .../jruby/1.1.4/lib/ruby/site_ruby/1.8/rubygems.rb:157: in

activate'
from .../jruby/1.1.4/lib/ruby/site_ruby/1.8/rubygems.rb:158: in

each'
from .../jruby/1.1.4/lib/ruby/site_ruby/1.8/rubygems.rb:157: in

activate'
from .../jruby/1.1.4/lib/ruby/site_ruby/1.8/rubygems.rb:157: in

activate'
from .../jruby/1.1.4/lib/ruby/site_ruby/1.8/rubygems.rb:49: in

$> gem 安装锄头

(安装了 hoe-1.10.0 和依赖 ruby​​forge-1.0.3)

$> 规范--帮助

用法:spec (FILE|DIRECTORY|GLOB)+ [options]
(etc., etc., etc.)

似乎“gem install rspec”没有安装依赖项。
不确定它是否是 Windows 上的 JRuby 独有的……其他操作系统未测试。

0 投票
2 回答
12924 浏览

ruby-on-rails - RSpec应该redirect_to问题

我正在为我的 Rails 控制器编写规范,这是我正在测试的操作:

这是验证它的规范:

我仍然从 RSpec 收到此错误:

'CoursesController POST /courses [良好输入]

创建后应重定向到课程索引页面'

失败的

预期重定向到“/课程”,没有重定向

任何想法为什么会发生这种情况?

解决了

正如rishavrastogi所说,应该 be_success期望 http 代码在 2xx 范围内,并且重定向属于 3xx 范围(实际上是它的 302)

断言需要更改为 => response.should be_redirect

尽管在这种情况下,检查响应是否为重定向然后检查重定向到特定页面是多余的,因此不再需要断言。

0 投票
3 回答
792 浏览

ruby-on-rails - 如何使用以前版本的 Rspec 运行我的 Specs?

我一直在我的一台机器上学习 RSpec 教程,希望能更多地了解 BDD 和 TDD。我的设置是使用 Rails 2.2.2 和 Rspec 1.1.12

今晚我决定继续使用我的主要机器并将我的代码从我的便携式计算机移动到我的桌面。没有 RSpec,我安装了 gem 。. .

冲突和诽谤!新版Rspec安装!1.2.0!现在我的测试到处都失败了!虽然我完全打算跟进并学习最新版本,但我真的很想完成本教程的剩余内容,而无需重新开始。我想知道。有没有办法安装并指定我想针对以前的 Rspec 1.2.12 运行我的代码?

0 投票
5 回答
8794 浏览

ruby-on-rails - 使用 Rspec 对链式方法进行存根

我想调用一个只返回一条记录的named_scope,但是named_scope返回一个数组,这没什么大不了的,因为我可以用.first链接它:

这很有效,我正在努力解决的是如何存根链式调用。有没有人对我将如何通过 Rspec 模拟实现这一目标提供参考或答案?