使用rspec进行测试时,在哪里放置常用的"测试实用程序方法"?

cai*_*nne 24 unit-testing rspec ruby-on-rails ruby-on-rails-3

假设您有一个销售小部件的购物网站.但是,每个小部件的库存都是有限的,因此保持"widget.number_still_available"数字是最新的非常重要.

我想写一个rspec测试

it "always displays the correct number still available" do

   # Assume there is a before method that sets up a widget with 5 available

   widget.number_still_available.should == 5

   # User "a@b.com" purchases 2 widgets
   widget.number_still_available.should == 3

   # User "c@d.com" purchases 1 widget
   widget.number_still_available.shhould == 2

   # User "a@b.com" cancels purchase of 1 widget
   widget.number_still_available.should == 4
end
Run Code Online (Sandbox Code Playgroud)

我希望能够编写执行"购买"和"取消"方法的仅测试方法.由于各种原因,这些操作与我的模型中的任何"真实"方法都不对应(最重要的是,PHP中有一个解耦的后端系统执行部分购买和取消操作).

使用RSpec时放置此代码的正确位置在哪里?在黄瓜中,我可以写几个步骤 - 但我不确定RSpec的正确等价物是什么.

Rya*_*igg 46

我建议在spec/support调用中创建一个新文件purchase_helpers.rb并将其放入其中:

module PurchaseHelpers
  def purchase_widgets(user, count=1)
    # Code goes here
  end

  def cancel_purchase(user, count=1)
    # Code goes here
  end
end

RSpec.configure do |c|
  c.include PurchaseHelpers
end
Run Code Online (Sandbox Code Playgroud)

这样做的好处不是把它放进去,spec/spec_helper.rb而是因为它并没有把很多不相关的RSpec代码集中在那个文件上.将事情分开是更好的做事方式.