Rspec应该在Sinatra和Rails中尝试不同的行为

时间:2012-09-28 10:25:58

标签: ruby-on-rails activerecord rspec sinatra rspec2

所以,我们考虑我们有两个模型,A1和A2,A1 has_many A2,而A2 belongs_to A1。根据ActiveRecord规范,如果您从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问题,但他们不承认这一点。

1 个答案:

答案 0 :(得分:0)

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

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

我的猜测是,在Sinatra a1.a2s每次调用时都会返回一个新实例,因此期望不会与create的调用者绑定。

你可以通过运行

测试我的理论
a1.a2s.object_id
a1.a2s.object_id

并查看两个ID是否相同。