【问题标题】:Getting an ActionController::UnknownFormat, rspec testing when creating new object创建新对象时获取 ActionController::UnknownFormat,rspec 测试
【发布时间】:2013-08-01 03:15:36
【问题描述】:

最近迁移到 Rails 4 并遇到了我以前没有遇到的错误。 我正在尝试测试我正在使用 Capybara/Rspec 制作的表格。

当我点击表单上的按钮时,我得到的错误是:

Failure/Error: find(".submit.button").click
     ActionController::UnknownFormat:
       ActionController::UnknownFormat
     # ./app/controllers/office_listings_controller.rb:32:in `create'
     # ./spec/features/office_listings_spec.rb:78:in `block (3 levels) in <top (required)>'

它指向我的控制器,看起来像:

def create
    selected_amenities = params[:amenities] || [] # empty list if no amenities checked
    @office_listing = OfficeListing.new(params[:office_listing])
    @office_listing.broker = current_broker
    p current_broker
    @office_listing.neighborhood = Neighborhood.find(params[:neighborhood_id])
    p @office_listing.neighborhood
    if @office_listing && @office_listing.save!
      @path = city_neighborhood_office_listing_path(@office_listing, :city_id => @office_listing.neighborhood.city.id, :neighborhood_id => @office_listing.neighborhood.id)
      create_amenities(@office_listing, selected_amenities)
      respond_to do |format|
        format.js
      end
    else
      @failure = "Unable to create office :-("
      respond_to do |format|
        format.js
      end
    end
  end

它不喜欢 format.js 行 即使我有一个 create.js.erb 文件,该文件在我实际运行页面时正在呈现。

不明白为什么实际页面正在运行,但我的测试失败了。

任何想法将不胜感激!

【问题讨论】:

  • 您的测试可能以 html 格式运行 create 操作,而您的控制器仅以 js 格式运行。

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


【解决方案1】:

我也遇到过类似的问题:

post :duplicate, id: patient.media.first.id

产生了同样的错误:

Failure/Error: post :duplicate, id: patient.media.first.id
ActionController::UnknownFormat:
ActionController::UnknownFormat

我通过将格式添加到 post call 来修复它:

post :duplicate, id: patient.media.first.id, format: :js

【讨论】:

    【解决方案2】:

    在 Rails 5 之前:

    post :action, id: ..., format: :json
    

    从 Rails 5 开始:

    post :action, params: { id: ..., format: :json }
    

    【讨论】:

    • 我希望我在一小时前看到的好答案。 Rails 5 FTW!
    【解决方案3】:

    是的,使用格式: :js 解决了这个问题,在我的例子中,我的代码如下所示:

    在我的规范中:

      params = {
        profile_id: profile.id,
        track_id: track.id,
        format: :js
      }
    
      post :create, params
    

    在我的控制器中:

      respond_to do |format|
        format.js {}
      end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 2014-05-21
      • 1970-01-01
      相关资源
      最近更新 更多