1

所以,假设我们有两个模型,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 问题,但他们不承认这一点。

4

1 回答 1

0

您如何将数据存储在 Sinatra 应用程序中?

在 ActiveRecord 中,两次都a1.a2s为您提供相同的ActiveRecord::Relation实例,因此期望绑定到调用create.

我的猜测是,在 Sinatraa1.a2s中,每次调用它时都会返回一个新实例,因此期望不受create.

你可以通过运行来测试我的理论

a1.a2s.object_id
a1.a2s.object_id

并查看两个 id 是否相同。

于 2013-12-30T04:09:56.097 回答