使用Rails JSONAPI :: Serializer测试rspec帖子

时间:2016-01-26 21:27:59

标签: ruby-on-rails-4 serialization rspec-rails json-api

我正在使用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请求数据。

1 个答案:

答案 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