当模型与另一个类的模型交互时,组织Rspec测试的最佳方法是什么?

时间:2014-01-14 00:17:25

标签: ruby-on-rails ruby rspec

为了论证,我说Event模型需要在首次创建Notification时创建Event。例如,使用Rails中的after_create回调。

我应该在哪个规范中为回调放置测试? E.g models/event_spec.rbmodels/notification_spec.rb?在其他地方作为集成测试?

这是我目前的思考过程:

我的第一反应是将其放在event_spec.rb

describe Event do
  ...
  describe 'callbacks' do
    it 'should create a Notification when first saved' do
      # assertions here
    end
  end
end

然而,这感觉我正在打破关注点的分离。例如,我正在测试Notifcation规范中是否创建了Event。然后我认为将这些测试放在notification_spec.rb

中可能更合适
describe Notification do
  ...
  describe 'callbacks' do
   it 'should be created when new an Event is first saved' do
     # assertions here
   end
  end
end

但这也感觉不对,因为我们现在正在测试Event规范中Notification类的回调代码。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

这属于Event规范。 Event负责创建Notification。此外,回调代码位于Event源文件中,因此寻找回调测试的人通常希望在Event规范中找到它。

更重要的问题是:如何测试? “mockist”会完全隔离Notification模型:

it "should create a Notification" do
  Notification.should_receive(:create)
  event.save!
end

这可确保回调创建Notification,但不会运行create方法。