ruby-on-rails - 如何测试 RSpec 中的相关(耦合)方法?

标签 ruby-on-rails ruby rspec

假设我们有类:

class Post
  def save
    # implementation
  end

  def self.find(id)
    #implementation
  end
end

我努力测试 #save.find,我已经:

describe '#save' do
  it 'saves the post' do
    subject.save
    created = Post.find(subject.id)
    expect(created).to eq(subject)
  end
end

describe '.find' do
  it 'finds the post' do
    subject.save
    created = Post.find(subject.id)
    expect(created).to eq(subject)
  end
end

#save 方法的情况下,我想检查副作用,在 .find 的情况下,我想测试返回值。如何在不重复规范的情况下处理这种情况?

最佳答案

在这种情况下,要隔离savefind 操作,您需要模拟存储库

无论您是写入数据库、文件系统、缓存还是其他任何东西 - 您都可以模拟它以期望保存功能,或者设置它(在测试开始之前)以确保 查找 有效。

对于大多数存储库实现,都有 gem 来模拟它们(Factory Girl 用于关系数据库,FakeFS 用于文件系统),但如果您有一些没有人听说过的异国情调的存储库,您可以自己推出。

通过这种方式,您可以在不使用 find 的情况下测试 save,反之亦然。

关于ruby-on-rails - 如何测试 RSpec 中的相关(耦合)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23722843/

相关文章:

ruby-on-rails - 从 Rails 2 升级到 Rails 3(以及 ruby​​ 版本)时出现问题

ruby-on-rails - `<module:Rails>' : superclass mismatch for class Server (TypeError)

ruby-on-rails - Rspec:2 级嵌套资源的 Controller 规范

ruby-on-rails - EWS ruby​​ 观点批量订阅推送通知

ruby-on-rails - 是否有全局设置 :default_strategy to :build for all factory_girl Factories? 的配置设置

ruby-on-rails - Rails.application.assets 在生产环境中的等价物是什么?

ruby - Mac OS X Lion 上的 sqlite3 gem...失败!

ruby-on-rails - Prawn PDF : I need to generate nested tables

ruby-on-rails - 你如何 stub /期待一个状态机事件?

ruby-on-rails - 使用 FactoryGirl 构建一个 json stub