假设您有一个出售小部件的购物网站。但是,每个小部件的 list 都是有限的,因此,务必保持“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

我希望能够编写执行“购买”和“取消”方法的仅测试方法。由于各种原因,这些 Action 与我的模型中的任何“真实”方法都不对应(最重要的是,PHP中存在一个分离的后端系统,该系统执行购买和取消 Action 的一部分)。

使用RSpec时,在哪里放置此代码的正确位置?在 cucumber 中,我可以编写几个步骤-但我不确定RSpec的正确等效方法是什么。

最佳答案

我建议在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

这样做而不是将其丢入spec/spec_helper.rb的好处是,它不会使文件堆满许多与RSpec的设置无关的代码。分离事物是做事情的更好方法。

08-07 16:19
查看更多