在rails 4升级之后,控制器rspec中的ActionController :: UnknownFormat

时间:2014-08-14 22:20:34

标签: ruby-on-rails ruby-on-rails-4 rspec-rails

我一直坚持这个问题一天。这就是控制器的样子:

class HarvestSchedulesController < ApplicationController

  before_filter :authenticate_user!

  respond_to :json

  def show
    @harvest_schedule = HarvestSchedule.find(params[:id])
    respond_with @harvest_schedule
  end    
end

和规范:

let(:schedule) { mock_model(HarvestSchedule).as_null_object }

describe "GET show" do
   before(:each) do
     HarvestSchedule.stub(:find).with("1") { schedule }
   end

   it "finds the harvest schedule" do
     HarvestSchedule.should_receive(:find).with("1") { schedule }
     get :show, id: 1
     assigns(:harvest_schedule).should eq schedule
   end
end

当我运行规范时,错误是:

Failure/Error: HarvestSchedule.should_receive(:find).with("1") { schedule }
ActionController::UnknownFormat:
  ActionController::UnknownFormat
# ./app/controllers/harvest_schedules_controller.rb:29:in `show'
# ./spec/controllers/harvest_schedules_controller_spec.rb:41:in `block (3 levels) in <top (required)>'

我根本看不到控制器或规格中的任何问题。该应用程序之前使用的是Rails 3.2.12并且所有规格都已通过。仅在将Rails版本升级到4.1.4后才会出现此错误。我使用的是rspec 2.14.1。有没有人遇到类似的问题?

干杯

1 个答案:

答案 0 :(得分:3)

您已指定该操作仅响应此处的JSON请求:

respond_to :json

因此,您还需要在规范中请求JSON响应:

get :show, id: 1, format: 'json'