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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.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 4 RSpec put、post、get、delete和patch的行为方式相同_Ruby On Rails 4_Rspec_Rspec3 - Fatal编程技术网

Ruby on rails 4 RSpec put、post、get、delete和patch的行为方式相同

Ruby on rails 4 RSpec put、post、get、delete和patch的行为方式相同,ruby-on-rails-4,rspec,rspec3,Ruby On Rails 4,Rspec,Rspec3,假设我这样指定资源路由: resources:projects,only:[:index,:show,:create,:update,:destroy] 通常在控制器测试中,我们只需执行以下操作即可触发:create的操作: post(:create) 当我们使用delete(:create)执行此操作时,它应该抛出一个路由错误异常。但事实并非如此。它还适用于get(:create),put(:create),补丁(:create) 这种行为的解释是什么?控制器规格是否正常?这是控制器规格的预期

假设我这样指定资源路由:
resources:projects,only:[:index,:show,:create,:update,:destroy]

通常在控制器测试中,我们只需执行以下操作即可触发
:create
的操作:

post(:create)

当我们使用
delete(:create)
执行此操作时,它应该抛出一个
路由错误
异常。但事实并非如此。它还适用于
get(:create)
put(:create)
补丁(:create)


这种行为的解释是什么?控制器规格是否正常?

这是控制器规格的预期行为。中定义了方法
get
post
patch
put
delete
head
。每个方法都模拟各自的HTTP请求,并在被测试的控制器中调用操作。例如:

post(:create)
模拟帖子并通过调用
create
操作对其进行处理。你可能有其他的行动,采取一个职位;要测试它们,您需要用操作名称替换
:create

请注意,不涉及路由器。路由不是控制器的责任,因此控制器规范不测试路由器的行为。要编写路由的单元测试,请使用

调用
delete(:create)
意味着“模拟删除并使用
create
操作处理它”。这没什么意义。但是,如果这是您想要的,那么没有什么可以阻止您创建将
DELETE/resource/:id
发送到
create
操作的路由(注意:这可能不是您想要的)