【问题标题】:RSpec 3 acceptance testing approach without "its" blocks没有“其”块的 RSpec 3 验收测试方法
【发布时间】:2014-08-23 01:20:36
【问题描述】:

我对如何在不使用 its(:...) 子句的情况下测试简单的 CSV 导入器存有疑问。

在 RSpec 2.x 中,我的方法是将导入的对象设置为我的规范的主题,然后在 its(...) 块中测试每个属性。这是一个类似于验收的测试,但它对我很有帮助,我不想对我用来进行 CSV 解析的库进行单元测试,因为它真的是一个微不足道的实现,所以我对 end-to 没意见-结束测试。

现在,使用 RSpec 3,我可以通过 transpec 使该规范通过,但我阅读了the explanation about why the its block has been removed,我认为 RSpec 3 提出了一种不同的方法,对吧?那么你将如何测试呢?

我觉得这样丑陋的积木不多

describe '#email' do
  subject { super().email }
  it { is_expected.to eq("john_doe@email.com") }
end

its(:email) { should == "john.doe@email.com" }

因为他们做的事情完全相同。

我听说您需要测试“行为”,但是验收测试呢?去这里的建议方式是什么? 谢谢!

【问题讨论】:

  • it 'has some email' { expect(subject.email).to eq("john_doe@email.com") } 有什么问题?
  • @UriAgassi - 谢谢!是的,你是对的。 specify { expect(subject.email).to eq("john_doe@email.com") } 是一个正确的解决方案。我想知道如何完成 Myron Marston 在我在问题中链接的文章中指出的内容。

标签: ruby csv rspec


【解决方案1】:

据我了解,Myron 建议将rspec-given 用于单行丰富的测试套件。使用此包,您的测试将如下所示:

Given(:email) { subject.email }

context "sign up" do
  When { subject.sign_up(email: "john.doe@email.com") }

  Then { email == "john.doe@email.com" }
end

【讨论】:

  • 天哪,太丑了。
  • 嗯...我同意@sevenseacat :D 我的意思是,如果这是要走的路,我更喜欢 RSpec 2.x 语法!但是感谢您编写此 Uri :)
【解决方案2】:

虽然 its 功能已从 rspec-core 中删除,但它已被放入可包含的 gem 中,rspec-its

https://github.com/rspec/rspec-its

我只想包含这个 gem 并继续按照你的方式编写测试 - 我发现它们最易读。

ps。不相关,但我也总是在规范中使用 eq 而不是 == :)

【讨论】:

    猜你喜欢
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    • 2020-01-18
    相关资源
    最近更新 更多