【发布时间】:2012-09-20 05:34:49
【问题描述】:
所以,让我们假设我们有两个模型,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 问题,但他们不承认这一点。
【问题讨论】:
-
规范不应引发异常,因为
should_receive捕获对方法的调用并且不会触发它 -
但这正是 Sinatra 案中发生的情况。你能告诉我这个异常捕获到底发生在哪里吗?
-
提供你正在测试的代码(模型或控制器),我会给你正确的规范
标签: ruby-on-rails activerecord rspec sinatra rspec2