2011-03-12 2 views
2

ActionController :: TestCase (아래 코드)를 사용하여 BranchController의 create 메소드를 테스트하고 있습니다. find_by_name 메서드를 호출하여 개체가 만들어 졌는지 확인합니다 (여기서는 이름이 고유하다고 가정). 테스트가 성공적으로 실행되었지만 mysql db에서 동일한 레코드를 확인할 때 해당 레코드가 존재하지 않습니다.레일 컨트롤러 테스트 : 테스트 성공 후 데이터베이스 상태가 변경되지 않습니까?

class Security::BranchControllerTest < ActionController::TestCase 
     test "the create" do 
    post(:create, :branch => {:name => "test branch", :details=> "test branch details"}) 

    #replace find with where searching with all of fields 
    assert_not_nil Company::Branch.find_by_name("test branch") 
     end 
    end 

답변

5

당신은 트랜잭션을 지원합니다 (대부분의 요즘처럼), 테스트는 기본적으로 각 테스트를 실행하기 전에 세이브 포인트를 설정하고 마지막에 롤백을 할 것입니다 레일 데이터베이스를 사용하는 경우.

이것은 삽입이 실제로 발생하지만 결과가 테스트 외부에 표시되지 않음을 의미합니다.

테스트 로그에 세이브 포인트 및 롤백 작업이 표시되어야합니다. = 테스트 클래스

거짓, 또는

같은 것을 추가하여 모든 테스트를 위해 그것을에서 패치 당신이 사용하지 않으려면

, 추가 할 수

self.use_transactional_fixtures

class ActiveSupport::TestCase 
    self.use_transactional_fixtures = false 
end 

은 test_helper 클래스에 있습니다.

테스트를 독립적으로 유지하는 좋은 방법이기 때문에 일반적으로이 기능을 사용하지 않는 것이 좋습니다.