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

Pas*_*rbo 12 rspec ruby-on-rails 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
Run Code Online (Sandbox Code Playgroud)

这是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
Run Code Online (Sandbox Code Playgroud)

这是控制器的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
Run Code Online (Sandbox Code Playgroud)

而sensor_attributes:

before do
    @sensor_attributes = { name: "Testname", description: "This is a Test-Description." }
end
Run Code Online (Sandbox Code Playgroud)

路线:

resources :sensors
Run Code Online (Sandbox Code Playgroud)

知道出了什么问题吗?

小智 23

json在控制器中使用格式,但是你正在通过format: :js测试.

它应该是:

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


Dis*_*sha 6

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

像下面这样的写法对我有用 -

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

  post sensors_path, params
Run Code Online (Sandbox Code Playgroud)