Rspec在API创建操作失败

时间:2015-12-11 19:05:46

标签: ruby-on-rails ruby ruby-on-rails-4 rspec

Rspec在此创建操作上保持失败,即测试运行时该事件是Nil对象。其他测试会将我的所有用户和用户令牌身份验证部分传递给我们。它正在正确加载FFaker / Factory-Girl数据。似乎无法在任何地方找到答案。

events_controller_rspec.rb

describe "POST #create" do
context "when is successfully created" do
  before(:each) do
    user = FactoryGirl.create(:user)
    @event_attributes = FactoryGirl.attributes_for(:event)
    api_authorization_header user.auth_token
    post :create, { user_id: user.id, event: @event_attributes }, format: :json
  end

  it "renders the JSON representation for the event record just created" do
    event_response = json_response[:event]
    expect(event_response[:name]).to eql @event_attributes[:name]
  end

  it { should respond_with 201 }
end

events_controller.rb

def create
 event = current_user.events.build(event_params)

 if event.save
  render json: event, status: 201, location: [:api, event]
 else
  render json: { errors: event.errors }, status: 422
 end
end

private

def event_params
  params.require(:event).permit(:name, :user_id)
end

end

应用程序/关切/ authenticatable.rb

module Authenticable
 # Devise methods overwrites

 def current_user
  @current_user ||= User.find_by(auth_token: request.headers['Authorization'])
 end
end

Rspec结果

Failures:

1) Api::V1::EventsController POST #create when is successfully created renders the JSON representation for the event record just created
 Failure/Error: expect(event_response[:name]).to eql @event_attributes[:name]

 NoMethodError:
   undefined method `[]' for nil:NilClass
 # ./spec/controllers/api/v1/events_controller_spec.rb:75:in `block (4 levels) in <top (required)>'

2) Api::V1::EventsController POST #create when is successfully created should respond with 201
 Failure/Error: it { should respond_with 201 }
   Expected response to be a 201, but was 422
 # ./spec/controllers/api/v1/events_controller_spec.rb:78:in `block (4 levels) in <top (required)>'

1 个答案:

答案 0 :(得分:1)

event_params方法在params.require(:event).permit(:name, :user_id)中告诉user_id需要成为event属性的一部分。

变化:

post :create, { user_id: user.id, event: @event_attributes }, format: :json

post :create, { event: @event_attributes.merge(user_id: user.id) }, format: :json