Rails4.2에서 SystemTestCase(시스템 스펙) 사용
13644 단어 Rails
SystemTestCase 오류 사용 방법
Rails5.1에서 가져온 SystemTestCase는 E2E 테스트를 위한 것으로 간주되기 쉽다
위조 코드
describe 'jQueryがふんだんに使われた検索結果ページ' do
before {
FactoryBot.create(:job_offer, title: '優良案件です')
FactoryBot.create(:job_offer, title: 'かせげるよ♪')
JobOffer.__elaseicsearch__.import
}
context 'AI判定がOFFのとき' do
before {
allow_any_instance_of(IntelligentFilter).to receive(:filter).and_return(false)
}
it '検索結果ページに2件とも仕事が表示されること' do
visit '/job_offers/search'
find("li.search_result", wait: 2) # 検索結果がJSで非同期描画されるまで待つ
expect(page).to have_content("優良案件です")
expect(page).to have_content("かせげるよ♪")
end
end
context 'AI判定で怪しい仕事が弾かれるとき' do
before {
allow_any_instance_of(IntelligentFilter).to receive(:filter) do |instance, job_offer|
job_offer.title.include?("♪") # 音符を含んでいる仕事は弾く
end
}
it '検索結果ページに優良案件だけが表示されること' do
visit '/job_offers/search'
find("li.search_result", wait: 2) # 検索結果がJSで非同期描画されるまで待つ
expect(page).to have_content("優良案件です")
expect(page).not_to have_content("かせげるよ♪")
end
end
end
위에서 말한 바와 같다분명히 이상한 사용법이지만'jQuery를 이용한 복잡한 화면을 대량으로 쓰는 테스트...'이럴 때 유용하다.
이런 일이 있었죠?
예를 들어 로그인한 후의 행동을 보고 싶은 웹 페이지가 있다고 가정해 보세요.
def login(username, password)
fill_in("username", with: username)
fill_in("password", with: password)
find('#login').click
end
예를 들어 상기 로그인의 보조 방법을 만들어 망라 모드의 테스트를 작성한다.시험의 관심사는 로그인 후의 행동, 로그인 화면의 DOM 구조가 바뀔 때 모든 스펙이 동시에 떨어진다.
로그인 브랜치
context '非ログイン状態でアクセス' do
before {
allow_any_instance_of(ApplicationController).to receive(:current_user).and_return(nil)
}
# いろいろ試験
end
context 'ログイン状態でログインしてアクセス' do
let(:current_user) { FactoryBot.create(:user) }
before {
allow_any_instance_of(ApplicationController).to receive(:current_user).and_return(current_user)
}
# いろいろ試験
end
context '仕事管理者でログインしてアクセス' do
let(:admin_user) { FactoryBot.create(:admin_user) }
before {
allow_any_instance_of(ApplicationController).to receive(:current_user).and_return(admin_user)
}
# いろいろ試験
end
context '退会済みユーザでログインしてアクセス' do
let(:inactivated_user) { FactoryBot.create(:user, :inactivated) }
before {
allow_any_instance_of(ApplicationController).to receive(:current_user).and_return(inactivated_user)
}
# いろいろ試験
end
"어떤 로그인 화면이든 어쨌든 로그인만 하면 돼!"이런 상황에서 위와 같이 모듈화하면 시험이 압도적으로 효율적이고 쉽게 망가지지 않는 시험이다.이렇게
하지만 SystemTestCase는 Rails5.1부터 사용할 수 있습니다.
Rails6가 곧 발매되는 현재에도 Rails4 계열을 사용하는 회사가 적지 않다.
• 패러다임이 많아 수동 테스트가 까다로움
· 그렇지만 JS가 많이 사용되어 Spec을 쓸 수 없습니다
이런 갈등이 격투하고 있겠지.
→ Rails5.1이면 SystemTestCase에 맛있는 음식 Spec을 써도 되나요?
→하지만 Rails4→5를 업데이트하려면 시험이 필요한데...
SystemTestCase는 Rails4로 후퇴할 수 없습니까??
결론적으로 말하면 대충 괜찮다.
완전히 이식할 수는 없지만 적절한 활동 상태를 유지할 수 있다.
https://github.com/rails/rails/pull/26703: SystemTestCase 등의 정의
https://github.com/rails/rails/pull/28083: Rspec 및 Rails 서버를 통해 DB 연결을 공유하는 스레드
해봤어요.
https://bitbucket.org/iwaki-i3/rails4_rspec_system_spec_mock_playground/src/master/backported_system_test_case/
SystemTestCase 등의 정의
참조https://github.com/rails/rails/pull/26703
|- action_dispatch
|- system_test_case.rb
|- system_testing/
Rails5.2 이후의 소스 파일을 복사합니다.Rspec 및 Rails 서버로 DB 연결 스레드 공유
https://github.com/rails/rails/pull/28083 Rails4.2 코드를 기반으로 Monkey 패치를 제작하여 채웁니다.
글씨가 좀 못생겼지만 이런 느낌.
https://bitbucket.org/iwaki-i3/rails4_rspec_system_spec_mock_playground/src/master/backported_system_test_case/lib/backported_system_test_case/active_record_monkey_patching.rb
로컬 Gem으로 가져오기
bundle gem backported_system_test_case
에서 Gem의 템플릿을 제작한 위치에서 이전 SystemTestCase 클래스의 파일과 Monky 패치를 넣습니다.서비스 본체의 Gemfile
Gemfile
group :test do
# 〜いろいろ〜
gem 'backported_system_test_case', path: 'backported_system_test_case' # 追記
end
이렇게 줄을 추가합니다. 총결산
"JQuery를 많이 사용해서 시험을 못 써..."이런 상황에서 시스템티스트케이스를 강제로 후퇴시키고 시험을 효율적으로 써서 안심감을 가지고 일찌감치 Rails5, Rails6로 높여보자.
Reference
이 문제에 관하여(Rails4.2에서 SystemTestCase(시스템 스펙) 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/YusukeIwaki/items/bed484639d4dc1326676텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)