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
操作的路由(注意:这可能不是您想要的)