ruby-on-rails - 使用多个 "it" block 在 rspec 中设置测试

标签 ruby-on-rails ruby rspec tdd bdd

假设我有一个实例方法可以执行许多我需要测试的不同的事情,比如 store#process_order。我想测试它向客户发送电子邮件、在订单表中添加条目、从信用卡中扣款等。在 rspec 中进行设置的最佳方法是什么?目前,我正在使用 rspec 和 factory girl 我做这样的事情:

describe Store do
  describe "#process_order" do
    before do
      @store = Factory(:store)
      @order = Factory(:order)
      # call the process method
      @store.process_order(@order)
    end

    it 'sends customer an email' do
      ...
    end
    it 'inserts order to db' do
      ...
    end
    it 'charges credit card' do
      ...
    end
  end
end

但是感觉真的很乏味。这真的是为我需要确保做几件不同事情的方法编写规范的正确方法吗?

注意:我对有关这是否是好的设计的答案不感兴趣。这只是我编造的一个例子来帮助解决我的问题 - 如何编写这些类型的规范。

最佳答案

这是一个很好的方法,因为如果将来发生故障,您可以确定哪个元素损坏了。我完全赞成单独测试事物。我倾向于不检查插入数据库的东西,因为你当时是 Rails 功能。我只是检查对象的有效性。

这也是 RSpec 书中使用的方法。如果您不确定与 RSpec 相关的任何内容,我当然会建议您阅读它。

关于ruby-on-rails - 使用多个 "it" block 在 rspec 中设置测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7294232/

相关文章:

ruby - RSpec 与 Shoulda?

ruby-on-rails - 如何在发送 Restful POST/PUT API 之前使用 rails3.2.x 获取 CSRF token ,而无需来自服务器端的任何表单/UI?

ruby-on-rails - SimpleForm 删除包装 div

ruby-on-rails - Rails 4.1.6 session ID

mysql - 如何将Rails服务器设置为apache?

ruby - 运行存储在互联网上的 Ruby 脚本

ruby-on-rails - 使用 Controller 规范之外的请求助手

ruby-on-rails - 如何确保我正在测试所有内容,我拥有所有功能并且只有旧代码的那些功能?

ruby-on-rails - 如何在 RSpec 中 stub 两个链接的 ActiveRecord 方法?

ruby-on-rails - PG::UndefinedTable: 错误:关系 "----' 不存在