我正在使用jsonapi-serializers gem,并且在弄清楚如何使用rspec和json有效负载测试发布请求时遇到了一些麻烦。我知道它有效,因为我可以使用postman并发送json并成功创建新对象,但我不确定为什么我无法使rspec测试工作。
这是api控制器方法:
def create
@sections = @survey.sections.all
if @sections.save
render json: serialize_model(@section), status: :created
else
render json: @section.errors, status: :unproccessable_entity
end
end
serialize_model
只是JSONAPI::Serializer.serialize
这是我目前对该控制器的rspec测试:
describe 'POST #create' do
before :each do
@section_params = { section: { title: 'Section 1', position: 'top', instructions: 'fill it out' } }
post '/surveys/1/sections', @section_params.to_json, format: :json
end
it 'responds successfully with an HTTP 201 status code' do
expect(response).to be_success
expect(response).to have_http_status(201)
end
end
我尝试了一些不同的东西,但无法弄清楚如何解决这个问题。如果我使用Postman发布该网址以及确切的json有效负载,则会成功创建新部分。
get请求测试工作正常,我不知道如何使用rspec和jsonapi-serializer处理json请求数据。
答案 0 :(得分:1)
试试这个。将YourApiController
替换为你的名字
describe YourApiController, type: :controller do
context "#create" do
it 'responds successfully with an HTTP 201 status code' do
params = { section: { title: 'Section 1', position: 'top', instructions: 'fill it out' } }
survey = double(:survey, sections: [])
sections = double(:sections)
section = double(:section)
expect(survey).to receive(:sections).and_return(sections)
expect(sections).to receive(:all).and_return(sections)
expect(sections).to receive(:save).and_return(true)
expect(controller).to receive(:serialize_model).with(section)
post :create, params, format: :json
expect(response).to be_success
expect(response).to have_http_status(201)
expect(assigns(:sections)).to eq sections
end
end
end