2017-01-04 10 views
0

나는 테스트 케이스 작성을 위해 레일 프레임 워크를 사용하고있다. 내가 레일 activerecord SQL 쿼리를 테스트하고 싶습니다. activerecord 쿼리를 테스트하기 위해 테스트를 위해 샘플 데이터를 제공하는 레일 비품을 사용하고 있습니다.레일즈 테스트 케이스 : 글로벌 테스트보다는 특정 테스트 케이스를위한 픽스처를 만들 수있는 방법이 있습니까?

위의 데이터와 지금
user1: 
    name: 'xxx' 

user2: 
name: 'xyz' 

, 나는 데이터베이스에 레코드 수를하는 카운트 하나의 테스트 케이스를 작성했습니다 : 아래 그림과 같이

처음 내 고정 파일 users.yml에서 두 기록이 있었다 2와 같고 잘 작동합니다. 하지만 다른 테스트 케이스 시나리오에 필요한 users.yml 파일에 사용자를 한 명 더 추가하면 카운트가 3이되고 테스트 케이스가 실패 할 때 문제가 발생합니다.

알고 싶습니다. 특정 테스트 케이스에 대한 조명기를 작성하여 각 테스트 케이스에 자체 조명기 데이터가 포함되도록하는 방법이 있습니까?

답이 예인 경우, 데이터베이스의 레코드 수를 계산하는 테스트 사례는 조명기 파일에 추가 사용자 레코드를 추가해도 실패하지 않습니다.

+0

당신이 제 3 사용자를 생성하고 싶지 않은 어떤 이유가 있습니까 테스트의 범위 내에서 테스트를 수행해야합니다. –

+0

@AbassSesay 테스트 범위 내에서 세 번째 사용자를 만드는 방법 ?? 이것은 내가 찾고있는 것입니다 ... –

+0

나는'User' 모델을 가지고 있다고 가정합니다, 그래서'User.create ()'를 테스트 그룹의 범위와 함께 수행하면 3 번째 레코드를 생성해야합니다. 당신. –

답변

1

이 문제를 해결하는 데는 몇 가지 방법이 있습니다. 일부 사람들은 조명기를 전혀 사용하지 않을 것을 권장 할 수 있습니다.이 방법은 나중에 조사 할 가치가 있습니다. 그러나 가장 즉각적인 해결책은 데이터베이스의 특정 상태를 테스트하지 않는 것입니다. 당신이 당신의 시험으로 설정 한 경우 :

it 'should add one' do 
    User.create(username: 'username') 
    assert_equal 2, User.count 
end 

변화 대신 단순히 사용자의 수는 하나에 의해 간 것을 계산 : 사실

it 'should add one' do 
    count = User.count 
    User.create(username: 'username') 
    assert_equal count + 1, User.count 
end 

, 사용자 정의 주장 단지에있다 이 사용 사례 :

http://apidock.com/rails/ActiveSupport/Testing/Assertions/assert_difference

it 'should add one' do 
    assert_difference("User.count", 1) do 
    User.create(username: 'username') 
    end 
end 
+0

감사. 이것은 작동하지만 내가 찾고있는 것은 테스트의 범위 내에서 조명기 또는 추가 사용자를 생성하여이 새로 생성 된 조명기가 다른 테스트 케이스에서 사용할 수 없게하는 것입니다. –

+1

저는 조명기로 할 수 없다고 확신합니다. . 그러나 개별 테스트 파일의 'before'블록에 객체를 만들 수 있습니다. [Fabrication] (https://www.fabricationgem.org/) gem은 필요할 때만 생성되는 객체에 대한 템플릿을 제공하는 데 유용합니다. – wendybeth