2016-07-11 5 views
0

현재 프로젝트에 대한 테스트를 작성하고 싶습니다.레일 : 사용할 테스트 메소드

이러한 테스트는 주로 데이터베이스의 저장된 데이터와 관련이 있습니다. 예를 들어

:

  • 사용자는 그에게 gold badge (true로 설정 부울 필드)

  • 다음 3년 전에 등록 된 경우 bronze badge

  • 을 제공 7년 전에 등록하는 경우

음, 계산이 조금 더 복잡합니다. b efore 부울 필드가 true로 설정됩니다. 위의 두 예제와 매우 유사한 테스트해야하는 약 30-40 개의 테스트 사례가 있습니다.

은 좀 읽기에 대한 레일 테스트를했지만 나는 레일의 통합, 장치 및 기능 테스트 사이의 정확한 차이를 알아낼 수 없었다.

필자의 경우 어떤 테스트 방법이 적절합니까?

답변

0

나는 그것을 구현할 방법에 달려 있다고 생각합니다.

사용자 뱃지를 확인하기 위해 cronjob을 사용하는 경우 전체 작업 대기 및 물건을 테스트하기 위해 통합 테스트가 유용 할 것입니다.

사용자가 로그인 할 때 업데이트하는 경우 모델 (단위) 테스트를 사용할 수 있습니다. 예를 들어 이 필드를 업데이트 정확히 코드가 실행되는 경우

class UserTest < ActiveSupport::TestCase 
    test "users badge is updated on login if needed" do 
    user = User.create ... , golden_badge: false 
    travel_to Time.now + 7.years do 
     # simulate login, something like: user.login(user: "", pass: "") 
     assert user.golden_badge 
    end 
    end 
end 

이 테스트는 test/models/user_test.rb

0

에서 일어날 그것은 의존한다. 테스트는 단위 테스트는 모델/user_spec.rb에 자리를 취할 필요가 유일한 것 그리고

class User < ActiveRecord::Base 
    before_save :check_rewards 

    def check_rewards 
    self.update(golden_badge: true) if created_at > 5.years.ago 
    end 

: 예를 들어, 당신은 다음과 같이 사용자 모델 자체에서 사용자의 업데이트에 대한 이러한 '보상'을 선택하면 .

코드가 매 시간 cron 작업으로 실행 된 경우 check_rewards.rb라는 파일에서 두 위치에 속하는 메서드를 사용했습니다.

먼저 service/check_rewards.rb (또는 commands/check_rewards.rb 또는 기타 디렉토리)의 업데이트를 수행하는 객체의 '단위 테스트'가 위의 사용자 사양 코드처럼 실제 기능을 테스트하기 위해 작동합니다.

마지막으로 integration/check_rewards_spec.rb의 통합 테스트를 통해 사용중인 작업 관리자가 예상대로 작동하여 작업 자체가 실제로 실행되고 예상되는 동작을 수행하는지 확인해야합니다.

+0

내가 생각하는 사용자에게는 before_save가 거의 호출되지 않습니다. 사용자가 이메일을 업데이트 한 다음 배지를 받으면 정말 어색 할 것입니다. 미소 : – siegy22

+0

조건없이 전화하는 경우는 거의 없으며이를 단순화했습니다. 나는 종종 before_save를한다. do_somthing if : should_do_something? 예를 들면. – RichardAE

0

단위 테스트 : 최소 단위의 코드를 테스트합니다. 특정 기능. 컨트롤러에서의 CRUD 작동 테스트와 같습니다. 각 작업은 단위 테스트에서 개별적으로 테스트합니다.

통합 테스트 : 기능 또는 모듈 그룹을 테스트합니다. 간단한 사용자가 볼 수있는 항목과 웹 사이트에서 로그인 한 사용자가 볼 수있는 항목을보고 싶은지 고려하십시오. 따라서 두 경우 모두 로그인 기능을 테스트 한 후 특정 기능을 테스트해야합니다.

기능 테스트는 완전히 다릅니다. 여기에서 모듈 또는 모듈 조합을 테스트 할 수 있습니다. 통합 테스트와 더 비슷합니다.

Unit tests tell a developer that the code is doing things right; functional tests tell a developer that the code is doing the right things.

는 기능 테스트에 대한 내 관점에서 here

더 가야 읽어보십시오.