Rails / Rspec:为什么这个控制器规范路由正确?

时间:2014-07-04 11:50:41

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

我已经开始为新控制器编写规范了。通过权限,此控制器的操作不应是可路由的。我还没有为它写过一条路线。然而,不知何故,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. 一般来说,我该怎么调试呢?我如何从行动中倒退来确定遵循的路线?
  3. 谢谢!

1 个答案:

答案 0 :(得分:1)

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

控制器规格直接进入您的控制器操作。

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