Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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
RSpec参数都是字符串、中断测试_Rspec_Ruby On Rails 4 - Fatal编程技术网

RSpec参数都是字符串、中断测试

RSpec参数都是字符串、中断测试,rspec,ruby-on-rails-4,Rspec,Ruby On Rails 4,我正在编写一些控制器/请求规范,目前正在处理一个更新请求。相当直截了当,在许多其他情况下,这是完美的工作,但我似乎遇到了一个障碍 在routes.rb文件中,我限制了控制器的操作 resources :model, except: [:destroy, :edit, :new] 为了避免在用户请求/new时调用show操作的问题,我添加了一个约束,因此路由现在看起来像 resources :model, except: [:destroy, :edit, :new], constraints:

我正在编写一些控制器/请求规范,目前正在处理一个更新请求。相当直截了当,在许多其他情况下,这是完美的工作,但我似乎遇到了一个障碍

在routes.rb文件中,我限制了控制器的操作

resources :model, except: [:destroy, :edit, :new]
为了避免在用户请求
/new
时调用
show
操作的问题,我添加了一个约束,因此路由现在看起来像

resources :model, except: [:destroy, :edit, :new], constraints: { id: /\d/ }
这很好地工作,请求
/new
会导致404,但是我现在的请求测试有问题,因为RSpec似乎会生成所有参数字符串

在我的测试中,我正在做

resource = FactoryGirl.create(:model)
params = { id: resource.id, resource: { edited: true }}
put :update, params
但是,这会导致错误

No route matches {:id=>"10", :resource=>{:edited=>true}, :controller=>"models", :action=>"update"}
如果这个错误是正确的,那么尽管我将id param设置为存储在资源中的整数id(即使我显式地将.to_I放在它上面),但由于我的约束,该参数仍将作为字符串发送,并且与路由不匹配

有没有办法阻止这种行为?我的路由测试按预期工作,所以我不明白为什么会失败

更新


有趣的是,如果我将测试从控制器规范转移到请求规范,这将不再失败,并且工作正常。我很乐意为他们提供所有的请求规范,但我仍然很好奇为什么会发生这种情况,或者我是否在rSpec中偶然发现了一个bug?

您的正则表达式指定了一个位数的
id
,但您传递的是一个两位数的id。也许修复方法很简单,只要将正则表达式更改为
/\d+//code>