모의 테스트와 스텁을 테스트하고 있지만 컨트롤러에서 create
동작을 테스트 할 때 원하는 출력을 얻을 수 없습니다.테스트 할 때 정확한 출력을 얻지 못함 RSpec에서 동작 만들기
실패한 테스트 :
describe 'authenticated user' do
let(:user) { instance_double(User) }
before do
allow(controller).to receive(:current_user) { user }
allow(controller).to receive(:authenticate_user!) { true }
end
describe "POST create" do
let(:achievement_params) { { title: "title" } }
let(:create_achievement) { instance_double(CreateAchievement) }
before do
allow(CreateAchievement).to receive(:new) { create_achievement }
end
it 'sends create message to CreateAchievement' do
expect(CreateAchievement).to receive(:new).with(achievement_params, user)
expect(create_achievement).to receive(:create)
post :create, achievement: achievement_params
end
end
end
컨트롤러의 create
행동
def create
service = CreateAchievement.new(params[:achievement], current_user)
service.create
render nothing: true
end
오류 : 당신을 "허가"를 POST 값이 필요하기 때문이다
1) AchievementsController authenticated user POST create sends create message to CreateAchivement
Failure/Error: expect(CreateAchievement).to receive(:new).with(achievement_params, user)
#<CreateAchievement (class)> received :new with unexpected arguments
expected: ({:title=>"title"}, #<InstanceDouble(User) (anonymous)>)
got: (<ActionController::Parameters {"title"=>"title"} permitted: false>, #<InstanceDouble(User) (anonymous)>)
Diff:
@@ -1,2 +1,3 @@
-[{:title=>"title"}, #<InstanceDouble(User) (anonymous)>]
+[<ActionController::Parameters {"title"=>"title"} permitted: false>,
+ #<InstanceDouble(User) (anonymous)>]