我已经开始为新控制器编写规范了。通过权限,此控制器的操作不应是可路由的。我还没有为它写过一条路线。然而,不知何故,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
中的字符串出现在我的控制台中。
因此...
谢谢!
答案 0 :(得分:1)
控制器规范中的Rspec不通过路由堆栈(与功能或请求规范不同)。
控制器规格直接进入您的控制器操作。
您还可以在控制器类之上使用hide_action :receiver
来隐藏操作。如果您需要测试您的操作是否无法路由,请使用功能测试。