【问题标题】:Not sure how to test this properly不知道如何正确测试
【发布时间】:2014-05-07 14:57:00
【问题描述】:

我有一条匹配的路线:

get 'beat' => 'heartbeat#beat', as: => 'beat'
#=> api_v1_beat GET  /api/v1/beat(.:format)   api/v1/heartbeat#beat

然后我有一个控制器,非常基本!

module Api
  module V1
    class HeartBeatController < BaseController

      def beat
        respond json: {}, status: 200
      end

    end
  end
end

概念是您每 15-30 秒 ping 一次,看看是否还活着。

现在我需要对此进行测试,

require 'spec_helper'

describe Api::V1::HeartBeatController do
  context "200" do
    it "should ping the  heartbeat and return 200" do
      get :beat
      expect(response.code).to eql '200'
    end
  end
end

但它失败了:

 Failure/Error: get :beat
 ActionController::UrlGenerationError:
   No route matches {:action=>"beat", :controller=>"api/v1/heart_beat"}

呃???它所陈述的内容非常明显,但也许我错过了一些如此初级和基本的东西?

【问题讨论】:

  • 您使用的是 Rails 3 还是 Rails 4?

标签: ruby-on-rails rspec routes


【解决方案1】:

试试:

get 'beat' => 'heart_beat#beat', as: => 'beat'

其他人的注意事项: 在 Rails 4 中,对于多字控制器,路由中控制器对象的名称必须是蛇形大小写。

Ex:
get 'action' => 'snake_case_controller_name#action'

【讨论】:

    【解决方案2】:

    还要编写路由测试:

    describe HeartBeatController do
      describe "routing" do
        it "routes to #beat" do
          get("/beat}").should route_to("api/v1/heart_beat#beat")
        end
      end
    end
    

    【讨论】:

      猜你喜欢
      • 2011-12-13
      • 2014-08-25
      • 1970-01-01
      • 2013-08-13
      • 2021-02-11
      • 2019-03-07
      • 2021-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多