ActionController ::带有rspec和post请求的UnknownFormat

时间:2014-02-24 07:01:09

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

我正在尝试在rails 4上使用rspec进行一些集成测试,但在运行测试时我总是得到“ActionController :: UnknownFormat”异常。

我尝试了两种不同的方式:

Failure/Error: post sensors_path, sensor: @sensor_attributes.to_json
ActionController::UnknownFormat:
    ActionController::UnknownFormat


Failure/Error: post sensors_path, sensor: @sensor_attributes, format: :js
ActionController::UnknownFormat:
    ActionController::UnknownFormat

这是rspec代码:

it "should change the number of sensors" do
    lambda do
        post sensors_path, sensor: @sensor_attributes.to_json 
        end.should change(Sensor, :count).by(1)
    end

it "should be successful" do
    post sensors_path, sensor: @sensor_attributes, format: :js
    response.should be_success
end

这是控制器的create语句:

def create
    respond_to do |format|
        format.json do
            @sensor = Sensor.new(params["sensor"])
            @sensor.uuid = SecureRandom.uuid

            @sensor.save

            render nothing: true
        end
    end
end

还有sensor_attributes:

before do
    @sensor_attributes = { name: "Testname", description: "This is a Test-Description." }
end

路线:

resources :sensors

知道出了什么问题吗?

4 个答案:

答案 0 :(得分:21)

您在控制器中使用json格式,但是您在测试中传递了format: :js

应该是:

post sensors_path, sensor: @sensor_attributes, format: :json

答案 1 :(得分:4)

这是为了未来的读者。 不知怎的,答案对我没有帮助。

像下面的写作对我有用 -

params = {
    sensor: { 
       name: "Testname", 
       description: "This is a Test-Description." 
    },
    format: :json
  }

  post sensors_path, params

答案 2 :(得分:0)

在路径上附加.json对我也很有效(因为我使用的是共享的rspec示例,不能仅附加format: json)...

发布“#{sensors_path} .json”,传感器:@sensor_attributes

答案 3 :(得分:-2)

it "creates a new sensor" do
    expect {
       post :create, {:sensor => {here_you_need_to_put_the_variables_which_are_needed_to_create_a_sensor}}
    }.to change(Sensor, :count).by(1)
end

创建方法中,以下行

@sensor = Sensor.new(params["sensor"])

应该是:

@sensor = Sensor.new(params[:sensor])

我不知道你的代码结构。我给出的所有解决方案代码都是基于我自己的假设。