如何在RSpec中测试相关(耦合)方法?

时间:2014-05-18 14:13:43

标签: 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,我想测试返回的值。如何处理这种情况而不重复规范?

1 个答案:

答案 0 :(得分:-1)

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

无论您是要写入数据库,文件系统,缓存还是其他任何东西 - 您可以将其模拟为预期保存功能,或者设置它(在测试开始之前)以确保{{1工作。

对于大多数存储库实现,都有用于模拟它们的gem(Factory Girl用于关系数据库,FakeFS用于文件系统),但是如果你有一些奇怪的存储库没有人听过你可以自己动手的。

这样您就可以在不使用find的情况下测试save,反之亦然。