Questions tagged «rspec»

RSpec是一个受JBehave启发的针对Ruby编程语言的行为驱动开发(BDD)框架。它包含自己的基于JMock的完全集成的模拟框架。该框架可以被视为特定领域的语言(DSL),类似于自然语言规范。

2
Object.any_instance should_receive vs Expect()接收
以下代码段按预期工作: Object.any_instance.should_receive(:subscribe) 但是,当使用新的rspec期望时,它不起作用: expect(Object.any_instance).to receive(:subscribe) 错误是: expected: 1 time with any arguments received: 0 times with any arguments 我该如何使用Expect()来接收它?

9
Ruby on Rails:从test_unit切换到rspec
我正在阅读建议使用的教程rspec,但是我已经经历了许多默认的rails安装。我真的完全不需要重做安装。反正我跑步 $ rails g integration_test named 我懂了 invoke test_unit create test/integration/named_test.rb 当我运行时bundle,rspec列出了各种宝石,但test_unit没有列出。本教程似乎有Rails调用,rspec而不是test_unit不做任何其他事情。如何使Railsrspec与Integration Test Generator命令一起使用?

13
如何使用rspec测试ActionMailerliver_later
尝试使用delay_job_active_record升级到Rails 4.2。我没有为测试环境设置delay_job后端,以为作业将立即执行。 我正在尝试使用Rspec测试新的'deliver_later'方法,但不确定如何。 旧控制器代码: ServiceMailer.delay.new_user(@user) 新的控制器代码: ServiceMailer.new_user(@user).deliver_later 我曾这样测试它: expect(ServiceMailer).to receive(:new_user).with(@user).and_return(double("mailer", :deliver => true)) 现在,我在使用它时遇到了错误。(双“ mailer”收到意外消息:带有(无参数)的deliver_later) 只是 expect(ServiceMailer).to receive(:new_user) 对于nil:NilClass,也使用“未定义的方法'deliver_later'”失败 我尝试了一些示例,这些示例使您可以查看是否使用ActiveJob中的test_helper将作业排入了队列,但我还没有设法测试排队的正确作业。 expect(enqueued_jobs.size).to eq(1) 如果包括test_helper,则通过,但不允许我检查它是否发送了正确的电子邮件。 我想做的是: 测试正确的电子邮件已排队(或在测试环境中立即执行) 具有正确的参数(@user) 有任何想法吗??谢谢

12
#<RSpec :: Core :: ExampleGroup :: Nested_1:0x00000106db51f8>的未定义方法`get'
有人知道如何解决这个问题吗?在OSX上,尝试使RSpec与Rails 3.0.7一起运行。有关详细信息,请访问:https: //gist.github.com/1017044 it "renders buttons_widgets partial" do get :buttons_widgets response.should render_template("buttons_widgets") end → rspec tools_model_spec.rb /Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/version.rb:4: warning: already initialized constant STRING /Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/metadata.rb:48: warning: already initialized constant RESERVED_KEYS /Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/pending.rb:6: warning: already initialized constant DEFAULT_MESSAGE /Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/world.rb:6: warning: already initialized constant PROC_HEX_NUMBER /Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/world.rb:7: warning: already initialized constant PROJECT_DIR /Users/mm/.rvm/gems/ruby-1.9.2-p0@evergreen/bundler/gems/rspec-core-bea2366c817e/lib/rspec/core/configuration.rb:43: warning: already initialized …

5
RSpec存根方法是否可以按顺序返回不同的值?
我有一个模型家庭模型,该模型location可以合并location其他对象(成员)的输出。(成员与家庭有联系,但这在这里并不重要。) 例如,给定 member_1具有location=='圣地亚哥(旅行,返回5月15日)' member_2具有location=='圣地亚哥' Family.location可能返回“圣地亚哥(member_1出行,5月15日返回)”,具体情况并不重要。 为了简化Family.location的测试,我想对Member.location进行存根。但是,我需要它返回两个不同的(指定的)值,如上例所示。理想情况下,它们将基于的属性member,但是简单地按顺序返回不同的值就可以了。有没有办法在RSpec中做到这一点? 可以在每个测试示例中覆盖Member.location方法,例如 it "when residence is the same" do class Member def location return {:residence=&gt;'Home', :work=&gt;'his_work'} if self.male? return {:residence=&gt;'Home', :work=&gt;'her_work'} end end @family.location[:residence].should == 'Home' end 但是我怀疑这是个好习惯。无论如何,当RSpec运行一系列示例时,它不会还原原始类,因此,这种重写会“毒化”后续示例。 因此,有没有一种方法可以使存根方法在每次调用时返回不同的指定值?

3
Rspec输出格式:文档
当我运行rspec与rake rspec和我的测试是不正常的,我得到一个错误信息。但是,当我的测试通过时,我只会得到“ ..”。没有其他输出。我如何获得打印类似的内容: A User .... can only have one name A User .... can ...

7
如何在RSpec中多次说“ any_instance”“ should_receive”
我在rails中有一个导入控制器,该控制器将具有多个记录的多个csv文件导入到数据库中。我想在RSpec中测试是否通过使用RSpec实际保存了记录: &lt;Model&gt;.any_instance.should_receive(:save).at_least(:once) 但是我得到错误说: The message 'save' was received by &lt;model instance&gt; but has already been received by &lt;another model instance&gt; 人为的控制器示例: rows = CSV.parse(uploaded_file.tempfile, col_sep: "|") ActiveRecord::Base.transaction do rows.each do |row| mutation = Mutation.new row.each_with_index do |value, index| Mutation.send("#{attribute_order[index]}=", value) end mutation.save end 是否可以使用RSpec对此进行测试,或者有任何解决方法?

7
Rails 3.1,RSpec:测试模型验证
我从在Rails中使用TDD开始了我的旅程,遇到了一个关于模型验证测试的小问题,我似乎找不到解决方案。假设我有一个用户模型, class User &lt; ActiveRecord::Base validates :username, :presence =&gt; true end 和一个简单的测试 it "should require a username" do User.new(:username =&gt; "").should_not be_valid end 这样可以正确测试状态验证,但是如果我想更具体些怎么办?例如,在错误对象上测试full_messages。 it "should require a username" do user = User.create(:username =&gt; "") user.errors[:username].should ~= /can't be blank/ end 我对最初尝试(使用should_not be_valid)的担心是RSpec不会产生描述性错误消息。它只是说“预期有效?返回假,就成真”。但是,第二个测试示例有一个较小的缺点:它使用create方法而不是new方法来获取错误对象。 我希望我的测试可以更具体地说明他们正在测试的内容,但同时不必接触数据库。 有人有意见吗?


2
Rubocop 25行块大小和RSpec测试
典型的RSpec单元测试大量使用嵌套的Ruby块,以构造代码并利用DSL的“魔力”使规范读取像BDD语句: describe Foo do context "with a bar" do before :each do subject { Foo.new().add_bar } end it "looks like a baz" do expect # etc 在理想的规格中,每个示例都可以相对简短和精确。然而它似乎平常有外块增长到100行好事,因为RSpec的结构以这种方式工作,并没有考虑很多规格的例子,每一个可能有特定设置的几行,去describe那是块大小等于或大于所描述主题的代码。 Rubocop的最新升级带来了一条新规则,该规则不得超过25行。我不确定它的基本原理,因为它没有在Ruby样式指南中列出。我可以看到为什么这会是一件好事,并将其添加到默认规则集中。但是,升级后,我们的Rubocop测试多次失败,并显示以下消息tests/component_spec.rb:151:3: C: Block has too many lines. [68/25] 对于像Rubocop这样的代码度量工具,我喜欢使用“使用默认值,链接到样式指南,完成工作”的策略。(主要是因为辩论制表符与空格以及其他细节浪费时间,而且IME从未得到解决)这显然是不可能的,我们的两个核心数据质量工具不同意代码布局方法-或至少这就是我解释结果的方式,我认为我们编写规范的方式并没有本质上的错误。 作为响应,我们仅将Rubocop块大小规则设置为高阈值。但这让我感到奇怪-我想念什么?RSpec是否在代码布局中使用了现在不可信的方法?在RSpec测试中,我必须采取哪些合理的选择来减小块大小?我可以看到重组代码以避免大块代码的方法,但是它们无一例外都是纯粹为了满足Rubocop规则的丑陋的骇客,例如将所有块分解为辅助函数: def looks_like_a_baz it "looks like a baz" do expect # etc end end …
70 ruby  rspec  rubocop 


6
Rails / Rspec使测试通过http基本认证通过
这是我在应用程序控制器文件(application_controller.rb)中的http基本身份验证 before_filter :authenticate protected def authenticate authenticate_or_request_with_http_basic do |username, password| username == "username" &amp;&amp; password == "password" end end 和我的家庭控制器的索引操作的默认测试(spec / controllers / home_controller_spec.rb) require 'spec_helper' describe HomeController do describe "GET 'index'" do it "should be successful" do get 'index' response.should be_success end end 由于身份验证方法,测试无法运行。我可以评论“ before_filter:authenticate”来运行它们,但是我想知道是否有办法使它们与该方法一起使用。 谢谢!
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.