【RSpec】결합 테스트 코드로 에러가 나오거나 나오지 않거나 ~ 안정되지 않은 수수께끼가 풀렸다 ~
11990 단어 RSpecRails조조FactoryBot루비
오늘의 해결 사건은 이쪽
조인 테스트 코드를 실행하는 경우 코드를 괴롭히지 않고 갑자기 오류가 발생합니다.
다시 한 번하면 오류가 발생하지 않거나
일어난 브라우저를 보면 너무 움직임이 빠르기 때문에
「이 녀석, 만약이나 움직임이 너무 빨라서 자신이 무엇을 하고 있는지 모르는 게 아닌가?」
라고, 감당하고 있었다.
로그인하고 있을 때의 브라우저의 움직임도 눈에도 멈추지 않는 빨리이고, 브라우저가 갱신된 순간에는 이제 텍스트가 입력되고 있다.
범인은 킹 크림슨이었다!
왜 기사를 쓰는 건 좀 어떨지 하고 있다고 생각하기 때문에 제대로 조사해 보았다.
오류를 읽어보십시오.
Failures:
1) Reviews レビューの編集と削除 レビューの編集画面に遷移したとき レビュータイトルにデータが入っていること
Failure/Error: let(:party) { FactoryBot.create(:party) }
ActiveRecord::RecordInvalid:
バリデーションに失敗しました: パスワードは不正な値です
⬇️⬇️⬇️たまにこれも出る⬇️⬇️⬇️
1) Reviews レビューの編集と削除 編集画面に遷移できる トップページに表示されている最新レビューから編集画面に遷移できる
Failure/Error: @current_user_review = FactoryBot.create(:review, user: user)
ActiveRecord::RecordInvalid:
バリデーションに失敗しました: パスワードは不正な値です
FactoryBot에서 생성하고 있는 데이터가 나쁨을 하고 있는 것은 아닐까 생각 바리데이션을 재검토해 보았다.
spec/factories/reviews.rb
FactoryBot.define do
factory :review do
title { Faker::JapaneseMedia::Doraemon.gadget }
content { Faker::JapaneseMedia::Doraemon.gadget }
association :user
association :party
after(:build) do |review|
review.image.attach(io: File.open('public/images/test_image.jpg'), filename: 'test_image.jpg')
end
end
end
spec/factories/parties.rb
FactoryBot.define do
factory :party do
name { Faker::JapaneseMedia::Doraemon.character }
introduction { Faker::JapaneseMedia::Doraemon.character }
season_id { 2 }
country_id { 2 }
genre_id { 2 }
official_url { Faker::JapaneseMedia::Doraemon.character }
association :user
after(:build) do |party|
party.image.attach(io: File.open('public/images/test_image.jpg'), filename: 'test_image.jpg')
end
end
end
spec/factories/users.rb
FactoryBot.define do
factory :user do
nickname { Faker::JapaneseMedia::Doraemon.character }
email { Faker::Internet.free_email }
password { Faker::Internet.password(min_length: 6) }
password_confirmation { password }
gender_id { 2 }
profile {Faker::JapaneseMedia::Doraemon.gadget}
genre_id { 2 }
admin { false }
end
factory :admin_user do
nickname { Faker::JapaneseMedia::Doraemon.character }
email { Faker::Internet.free_email }
password { Faker::Internet.password(min_length: 6) }
password_confirmation { password }
gender_id { 4 }
profile {Faker::JapaneseMedia::Doraemon.gadget}
genre_id { 4 }
admin { true }
end
end
association :review
를 users.rb에 쓰거나 여러 가지 시도했지만 관련없는 오류가 발생합니다.시도한 것
여러가지 조사해 보았는데 테스트 때에 사용하고 있다
let
의 부분을 바꾸면 좋을 것 같았다.spec/system/reviews_spec.rb
RSpec.describe "Reviews", type: :system do
let(:admin_user) { FactoryBot.create(:user, admin: true) }
#let(:party) { FactoryBot.create(:party) } ⬅️ここを下記コードに変更
let(:party) { FactoryBot.create(:party, user: user) } ⬅️追記した
let(:user) { FactoryBot.create(:user) }
〜以下略〜
이제 오류가 사라졌습니다.
원인으로서는
let(:user)
를 정의하고 있는데, party 인스턴스의 작성시에 새롭게 user를 작성해 그것을 연결하고 있기 (위해)때문에, 같은 유저가 이미 있는 것에 의해 에러가 되고 있었던 것 같다.인수에 user가 필요한 케이스였으므로, 테스트내에서 작성한
let(:party)
에 그 user를 관련해 보았더니, 이것으로 좋았던 것 같다.오늘도 하나 성장.
나는 오류를 넘어서 강해진다 (누구
도움이되었습니다.
@eitches 님
Rspec의 관련 주위에서 "밸리데이션에 실패했습니다"가 발생했을 때
고마워요.
Reference
이 문제에 관하여(【RSpec】결합 테스트 코드로 에러가 나오거나 나오지 않거나 ~ 안정되지 않은 수수께끼가 풀렸다 ~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/bon_eng/items/d7f6ca8fb2479b3205d5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)