2017-02-15 56 views
0

在我的應用程序中,我有服務(純紅寶石)。什麼是實施單元測試的最佳方法? shoiuld我爲控制器實現額外的單元測試,還是僅爲服務創建一個單獨的測試?Rails5 - 編寫服務單元測試的最佳方法是什麼?

更新 - 實施的解決方案:

爲UserService(測試/服務/ user_service_test
  • 單元測試
    1. 專用測試用於創建新員工包括驗證,如果UserService.create_user_for_employee方法被調用的測試是基於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.save在調用方法UserService.new.create_user(@employee)後說''employee_controller'' - 您想爲每個新員工自動創建用戶帳戶。在這種情況下,我想在我的測試「應該create_employee」我應該斷言UserService方法被調用 - 但是當我在看http://edgeguides.rubyonrails.org/testing.html一個沒有看到斷言....任何想法如何做到這一點? – MaciekR

    +1

    @MaciekR你要找的是Mocks。如果你使用'Test :: Unit',你可以包含Mocha並寫入'UserService.expects(:new).once'。在Rspec中,它會像'expect(UserService).to接收(:new)'一樣。 –

    +0

    thx - 我根據您的建議更新了我的問題。 – MaciekR

    相關問題