假设我们上课了:
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
,我想测试返回的值。如何处理这种情况而不重复规范?
答案 0 :(得分:-1)
在这种情况下,要隔离save
和find
操作,您需要模拟存储库。
无论您是要写入数据库,文件系统,缓存还是其他任何东西 - 您可以将其模拟为预期保存功能,或者设置它(在测试开始之前)以确保{{1工作。
对于大多数存储库实现,都有用于模拟它们的gem(Factory Girl用于关系数据库,FakeFS用于文件系统),但是如果你有一些奇怪的存储库没有人听过你可以自己动手的。
这样您就可以在不使用find
的情况下测试save
,反之亦然。