Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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 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

直到这里,一切正常。但是现在我对这个案例进行了Rspec测试,其中我有一个未保存的A1实例,然后我做了:

a1.a2s.should_receive(:create)
a1.a2s.create
这就是牛奶变酸的地方。我在Sinatra应用程序和Rails应用程序中复制了这些AR模型。当我在Rails中运行它时,规范运行,因为期望值是匹配的,即使它引发了一个异常。不过,在西纳特拉,它只是引发了异常,而不接受测试


有人能告诉我为什么吗?我认为这是Rspec的问题,但他们并不承认这一点

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

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

我的猜测是,在Sinatra
a1中,a2s
每次被调用时都会返回一个新实例,因此该期望不受
create
调用方的约束

你可以通过跑步来检验我的理论

a1.a2s.object_id
a1.a2s.object_id

查看两个ID是否相同。

规范不应引发异常,因为
should\u receive
捕获对该方法的调用,并且不会触发该调用,但这正是Sinatra案例中发生的情况。你能告诉我这个异常捕获到底发生在哪里吗?提供你正在测试的代码(模型或控制器),我会给你合适的规范