【问题标题】:Rails/Rspec: Why does this controller spec route correctly?Rails/Rspec:为什么这个控制器规范路由正确?
【发布时间】:2014-07-06 03:20:07
【问题描述】:

我已经开始为新控制器编写规范。按理说,这个控制器的动作不应该是可路由的。我还没有为它写一条路线。然而,rspec 以某种方式设法路由到该操作并运行它。

我很困惑。

这是一个规范和控制台输出,表明这不应该是可路由的:

it 'accepts POSTs to receiver' do
   { post: "http://api.customersure.com/webhooks/foobar/receiver" }.should route_to(controller: 'webhooks/foobar', action: 'receiver')
end

这失败了,它应该失败,因为我没有添加那条路线。

但是,这个控制器规范通过了:

describe Webhooks::FoobarController, type: :controller do
  describe "POST receiver" do
    it "returns 200 OK" do
      post :receiver
      expect(response.status).to eq(200)
    end
  end
end

我通过在动作中插入puts 快速验证了它肯定会路由到Foobar 控制器中的#receiver 动作。当我运行测试时,来自 puts 的字符串出现在我的控制台中。

那么……

  1. 对我最有帮助 - 谁能解释一下 rspec 是如何设法路由到此操作的?
  2. 一般来说,我该如何调试呢?我怎样才能从一个动作向后推算出遵循了哪些路线?

谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby rspec url-routing


    【解决方案1】:

    控制器规范中的 Rspec 不通过​​路由堆栈(与功能或请求规范不同)。

    控制器规范直接利用您的控制器操作。

    您还可以在控制器类的顶部使用hide_action :receiver 来隐藏操作。如果您需要测试您的操作是否不可路由,请使用功能测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-23
      • 1970-01-01
      • 1970-01-01
      • 2015-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多