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