2016-06-06 2 views
0

내 테스트 중 하나가 실패하기 시작했습니다. 브라우저에서 손으로 이전에 동일한 작업을 수행하고 진행 했으므로 기능이 작동하고 있음을 보여줍니다.FactoryGirl로 만든 레코드는 컨트롤러에서 사용할 수 없습니다.

나는 기록은 다음과 같이 테스트 할 생성 :

will = FactoryGirl.create(:user, profile: "security of the internet", first_name: "will") 

조사하기 위해, 나는 내 컨트롤러에서

binding.pry 

전화를했다. 작업은 사용자를 검색합니다.

내가 할 경우

User.all 

놀리려는 프롬프트에서, 어떤 사용자가 표시되지 않습니다, 빈 결과.

실제 테스트를 수행하면 User.all에 예상 레코드가 표시됩니다.

이 원인은 무엇입니까?

답변

0

일반적으로 테스트에 태그가 js : true이고 JS 가능 드라이버를 사용하지만 트랜잭션 데이터베이스 테스트를 사용하기 때문입니다. "풀 브라우저"드라이버를 사용할 때 응용 프로그램과 테스트가 실행됩니다. 서로 다른 스레드이므로 각 스레드마다 고유 한 데이터베이스 연결이 있습니다. 즉, 한 스레드 트랜잭션에서 작성된 객체는 커밋 될 때까지 다른 스레드에서 볼 수 없지만 트랜잭션 기반 테스트를 사용할 때는 아무 것도 커밋되지 않습니다. 문제를 해결하려면 트랜잭션 테스트를 끄고 해당 테스트에 대해 truncation 또는 delete를 사용하십시오. database302_cleaner를 참조하십시오.

+0

내 테스트가 js : true로 표시되어 있지 않으며 이미 절단을 사용하도록 database_cleaner를 설정했습니다. – Will

+0

@Will 데이터베이스 클리너와 Capybara를 추가하십시오. 질문을 configs하시기 바랍니다 –

+0

잘라 내기와 함께 database_cleaner를 사용한다고해서 트랜잭션에서 테스트를 실행하지 않는 것은 아닙니다. 그들은 일반적으로 함께 갈 것이지만 하나를 구성하면 다른 하나가 자동으로 구성되지 않습니다. 코드에서 'use_transactional_fixtures'를 검색하여 그 설정으로 이상한 일이 있는지 확인하십시오. –