ActionController:: UnknownFormat с запросом rspec и post

Я пытаюсь выполнить некоторые интеграционные тесты с rspec на rails 4, но при запуске тестов я всегда получаю исключение "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

Любая идея, что пошло не так?

Ответ 1

Вы используете формат json в контроллере, но вы проходите format: :js в тесте.

Это должно быть:

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

Ответ 2

Это для будущих читателей. Почему-то ответ мне не помог.

Написание, как показано ниже, работало для меня -

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

  post sensors_path, params

Ответ 3

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

В create метод :

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

должен быть:

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

Я не знаю структуру вашего кода. Весь код решения, который я дал, основывается на моем собственном предположении.