Ruby on rails Rspec应了解Sinatra和Rails的不同行为 >我们考虑两个模型A1和A2,A1 Hasy2多A2,A2属于A1。根据ActiveRecord规范,如果您从A1实例化,并尝试在a2集合中创建资源,则会触发异常,表示需要保存父级才能保存: a1 = A1.new a1.a2s.create #=> BOOM! Exception
直到这里,一切正常。但是现在我对这个案例进行了Rspec测试,其中我有一个未保存的A1实例,然后我做了:Ruby on rails Rspec应了解Sinatra和Rails的不同行为 >我们考虑两个模型A1和A2,A1 Hasy2多A2,A2属于A1。根据ActiveRecord规范,如果您从A1实例化,并尝试在a2集合中创建资源,则会触发异常,表示需要保存父级才能保存: a1 = A1.new a1.a2s.create #=> BOOM! Exception,ruby-on-rails,activerecord,rspec,sinatra,rspec2,Ruby On Rails,Activerecord,Rspec,Sinatra,Rspec2,直到这里,一切正常。但是现在我对这个案例进行了Rspec测试,其中我有一个未保存的A1实例,然后我做了: a1.a2s.should_receive(:create) a1.a2s.create 这就是牛奶变酸的地方。我在Sinatra应用程序和Rails应用程序中复制了这些AR模型。当我在Rails中运行它时,规范运行,因为期望值是匹配的,即使它引发了一个异常。不过,在西纳特拉,它只是引发了异常,而不接受测试 有人能告诉我为什么吗?我认为这是Rspec的问题,但他们并不承认这一点 您如何在S
a1.a2s.should_receive(:create)
a1.a2s.create
这就是牛奶变酸的地方。我在Sinatra应用程序和Rails应用程序中复制了这些AR模型。当我在Rails中运行它时,规范运行,因为期望值是匹配的,即使它引发了一个异常。不过,在西纳特拉,它只是引发了异常,而不接受测试
有人能告诉我为什么吗?我认为这是Rspec的问题,但他们并不承认这一点 您如何在Sinatra应用程序中存储数据 在ActiveRecord中,
a1.a2s
两次为您提供相同的ActiveRecord::Relation
实例,因此期望值绑定到调用create
的实例
我的猜测是,在Sinatraa1中,a2s
每次被调用时都会返回一个新实例,因此该期望不受create
调用方的约束
你可以通过跑步来检验我的理论
a1.a2s.object_id
a1.a2s.object_id
查看两个ID是否相同。规范不应引发异常,因为
should\u receive
捕获对该方法的调用,并且不会触发该调用,但这正是Sinatra案例中发生的情况。你能告诉我这个异常捕获到底发生在哪里吗?提供你正在测试的代码(模型或控制器),我会给你合适的规范