所以,假设我们有两个模型,A1 和 A2,A1 has_many A2,而 A2 belongs_to A1。根据 ActiveRecord Spec,如果您从 A1 实例化,并尝试在 a2 集合中创建资源,则会触发异常,说需要保存父级才能保存它:
a1 = A1.new
a1.a2s.create #=> BOOM! Exception
到这里,一切都清楚了。但是现在我对该案例进行了 Rspec 测试,其中我有一个未保存的 A1 实例,然后我这样做:
a1.a2s.should_receive(:create)
a1.a2s.create
这就是牛奶变酸的地方。我在 Sinatra 应用程序和 Rails 应用程序中复制了这些 AR 模型。当我在 Rails 中运行它时,规范会运行,因为期望是匹配的,即使它引发了异常。但是,在 Sinatra 中,它只是引发了异常,而不是接受测试。
有人能告诉我为什么吗?我认为这是一个 Rspec 问题,但他们不承认这一点。