1

내가 레일에 새로운 해요 작동합니다. 내 프로젝트에서는 rspec + capybara + poltergeist + selenium + database_cleaner를 사용합니다.레일 청소 데이터베이스는하지

소스 코드 github link

내가 PostgreSQL은 9.5.5가, 우분투 16.04 LTS.

때 실행

rspec spec/features # everything work fine too 

을 실행하지만 테스트

rspec spec/controllers # everything work fine 

내가 모든 테스트를 실행하면 먼저 승인 테스트를 실행

rspeC# part of tests fail 

: 셀레늄 -> question_id 브라우저 28 , database_cleaner를 사용하기 때문에 1이어야합니다.

왜 database_cleaner 내 데이터베이스를 청소하지? 내가 뭘 잘못 했니? 나는 해결책을 찾기 위해 하루를 보냈지 만 아무것도 발견하지 못했습니다. 도와주세요.

P. 그것은 훈련 프로젝트입니다.

내 Database_Cleaner 구성은 : 당신이 RSpecdatabase_cleanerCapybara config (설정)하는 방법을 읽을 수

다음
config.use_transactional_fixtures = false 

    config.before(:suite) do 
    DatabaseCleaner.clean_with(:truncation) 
    end 

    config.before(:each) do 
    DatabaseCleaner.strategy = :transaction 
    end 

    config.before(:each, js: true) do 
    DatabaseCleaner.strategy = :truncation 
    end 

    config.before(:each) do 
    DatabaseCleaner.start 
    end 

    config.after(:each) do 
    DatabaseCleaner.clean 
    Warden.test_reset! 
    if Rails.env.test? 
     FileUtils.rm_rf(Dir["#{Rails.root}/public/uploads"]) 
    end 
    end 
+1

해야한다 aner 그것은 데이터베이스가 비어있을 수 있지만 ID 열 카운터를 재설정하지 않을 수 있습니다 - 얼마나 많은 질문에 저장되어 있는지 확인하기 위해 데이터베이스를 쿼리 했습니까? 테스트에 하드 코드 된 레코드 ID가 없어야합니다.그게 문제가 아니라면 테스트 중 하나와 database_cleaner 구성을 질문에 추가하십시오. –

+0

질문 할 파일을 추가합니다. 그리고 기본적으로 나는 db에서 그 질문은 하나라고 생각하고, 추가 된 파일에 대한 링크는 링크 href : '/uploads/attachment/file/1/test_file.dat'을 가져야한다. 여기서 1은 질문 ID이다. 그러나 실제로 질문 ID는 28입니다. 나는 테스트가 실행될 때마다 데이터베이스 클리너 정리 테이블을 매번 생각했습니다. –

+1

@ThomasWalpole - 나는 당신이 이야기하는 것을 이해합니다. 예, 표는 1 행만 있습니다. 테스트를 다시 작성해야합니다. 해결책을 가져 주셔서 감사합니다. –

답변

2

테이블은 모든 레코드를 삭제 세제를 이 인덱스 카운터를 재설정 - 당신이 기록 3을 삭제 한 다음 새 레코드를 추가하는 경우처럼 - 새 4. 따라서 귀하의 경우는 27 개 기록이 삭제 된 가능성이 거기에 비록 사용자가 만든 다음 하나는 28 것 일 것입니다 단 1 실제 레코드. 데이터베이스를 조회하여 실제 레코드 수를 확인하십시오.

다음, 데이터베이스 청소기의 설정은 더 권장 설정처럼한다 - https://github.com/DatabaseCleaner/database_cleaner#rspec-with-capybara-example. append_after vs after는 안정성과 드라이버 이름을 확인하는 데 중요합니다. 단지 js 메타 데이터도 마찬가지입니다.

테스트에서 href '/uploads/attachment/file/1/test_file.dat'을 확인할 때 하드 코드 된 '1'이 있는지 확인하지 않아야합니다. 당신이 만든 레코드. 그래서 "/uploads/attachment/file/#{question.id}/test_file.dat"(분명히 question.id가 만든 객체와 변수 이름,하지만 내가 생각하는 당신의 검사 결과 중 적어도 하나와 일치 무엇에 따라 달라집니다.

귀하의 사양에 잠깐 모습 또한 후

-.. 어디서나 expect(current_path).to eq ...가 잘못하고있는 당신은 expect(page).to have_current_path(...)을 일을해야는 첫 번째 방법은 카피 바라의 재 시도 동작을 비활성화하고 벗겨지기 쉬운 시험으로 이어질 것입니다

그리고 마지막으로. - 당신이 expect(page).not_to have_content t('common.button.ready'), 내가 추측하고있어이 곳은 설정 database_cle이 방법에 따라? 일을해야하는 이유 당신이 생각을 expect(page).not_to have_button t('common.button.ready')

+0

감사합니다. –