2017-02-15 6 views
0

В моем приложении у меня есть серверные сервисы (чистый рубин). Каков наилучший подход к реализации модульных тестов? shoiuld я реализую дополнительные модульные тесты для контроллеров или создаю отдельные тесты только для служб?Rails5 - какой лучший подход для написания модульных тестов для служб?

обновление - реализованное решение:

  1. специализированные тесты для тестирования/услуг/user_service_test модульного тестирования UserService (
  2. для создания нового сотрудника включает в себя проверку, если метод UserService.create_user_for_employee называется тест основан на MiniTest:. :. Мок Это требует 'MiniTest/Autorun' (требуется 'MiniTest/Autorun' в test_helper)

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 - вот что я ожидал, что это лучшее решение. но - есть одна проблема. Позвольте сказать, что ininside 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 это будет нечто вроде 'ожидать (UserService). Получать (: new)'. –

+0

thx - я обновил свой вопрос с реализацией на основе вашего предложения. – MaciekR

Смежные вопросы