Ответ 1
Вы используете формат json
в контроллере, но вы проходите format: :js
в тесте.
Это должно быть:
post sensors_path, sensor: @sensor_attributes, format: :json
Я пытаюсь выполнить некоторые интеграционные тесты с 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
Любая идея, что пошло не так?
Вы используете формат json
в контроллере, но вы проходите format: :js
в тесте.
Это должно быть:
post sensors_path, sensor: @sensor_attributes, format: :json
Это для будущих читателей. Почему-то ответ мне не помог.
Написание, как показано ниже, работало для меня -
params = {
sensor: {
name: "Testname",
description: "This is a Test-Description."
},
format: :json
}
post sensors_path, params
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])
Я не знаю структуру вашего кода. Весь код решения, который я дал, основывается на моем собственном предположении.