2017-02-15 4 views
0

내 애플 리케이션에서 나는 순수한 루비 serveral 서비스를했습니다. 단위 테스트를 구현하는 가장 좋은 방법은 무엇입니까? shoiuld 컨트롤러에 대한 추가 단위 테스트를 구현하거나 서비스에 대해서만 분리 된 테스트를 작성합니까?Rails5 - 서비스 단위 테스트를 작성하는 가장 좋은 방법은 무엇입니까?

업데이트 - 구현 용액 : UserService.create_user_for_employee 메소드가 호출되면 새로운 종업원을 만드는 UserService (시험/서비스/user_service_test

  • 유닛 시험

    1. 전용 시험 인증을 포함하는 시험 Minitest에 기초한다 :. :. 모의는 'minitest/자동 실행'

    (test_helper에서 'minitest/자동 실행'을 요구하는)가 필요합니다 EmployeesControllerTest :

    ,
    setup do 
        #@employee = employees(:one) 
        @new_employee = {name: 'name', surname: 'surname', email: '[email protected]'} 
        sign_in users(:admin1) 
        @mock = UserService.new 
        end 
    
    test "should create_employee" do 
        assert_difference('Employee.count') do 
         post employees_url, employee: @new_employee 
        end 
    
        @mock.stub :create_user_for_employee, true do 
         assert(@mock.create_user_for_employee(@new_employee, 'user')) 
        end 
    
        assert_redirected_to employees_url 
        end 
    
  • 답변

    0

    /app/services 폴더에는 간단한 루비 클래스가있을 것입니다. 그런 다음 각 단일 서비스에 대해 매우 간단한 단위 테스트를 작성하십시오. /test/services/ 또는 spec/services/ 폴더 아래에 놓습니다. 응용 프로그램에 대해 정의한 각 클래스에 대해 하나의 단위 테스트 파일이 있어야합니다.

    +0

    thx - 그게 내가 가장 좋은 해결책이 될거라고 생각한거야. 하지만 한 가지 문제가 있습니다. Employee_controller를 employee.save 다음에 호출하여 UserService.new.create_user (@employee) 메서드를 호출하면 각 새 직원에 대한 사용자 계정이 자동으로 생성됩니다. 이 경우에 나는 내 테스트에서 "create_employee가 있어야한다"라고 주장한다. UserService 메소드가 호출되었다는 것을 주장해야한다. - 그러나 내가 http://edgeguides.rubyonrails.org/testing.html을보고있을 때 그 주장을 보지 않는다. .... 어떤 생각으로 어떻게 할 수 있습니까? – MaciekR

    +1

    @MaciekR 당신이 찾고있는 것은 Mocks입니다. 'Test :: Unit'을 사용한다면 Mocha를 포함시키고'UserService.expects (: new) .once'라고 쓸 수 있습니다. Rspec에서'expect (UserService) .to receive (: new)'와 같을 것이다. –

    +0

    thx - 제안에 따라 구현 된 것으로 내 질문을 업데이트했습니다. – MaciekR