我正在尝试在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
知道出了什么问题吗?
答案 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])
我不知道你的代码结构。我给出的所有解决方案代码都是基于我自己的假设。