В моем приложении у меня есть серверные сервисы (чистый рубин). Каков наилучший подход к реализации модульных тестов? shoiuld я реализую дополнительные модульные тесты для контроллеров или создаю отдельные тесты только для служб?Rails5 - какой лучший подход для написания модульных тестов для служб?
обновление - реализованное решение:
- специализированные тесты для тестирования/услуг/user_service_test модульного тестирования UserService (
- для создания нового сотрудника включает в себя проверку, если метод 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
thx - вот что я ожидал, что это лучшее решение. но - есть одна проблема. Позвольте сказать, что ininside employee_controller после employee.save вы вызываете метод UserService.new.create_user (@employee) - вы хотите автоматически создавать учетную запись пользователя для каждого нового сотрудника. В этом случае я предполагаю, что в моем тесте «должен create_employee» я должен утверждать, что вызывается метод UserService, но когда я смотрю на http://edgeguides.rubyonrails.org/testing.html, не вижу утверждения для этого .... любая идея, как это сделать? – MaciekR
@MaciekR то, что вы ищете, это Mocks. Если вы используете 'Test :: Unit', вы можете включить Mocha и написать' UserService.expects (: new) .once'. В Rspec это будет нечто вроде 'ожидать (UserService). Получать (: new)'. –
thx - я обновил свой вопрос с реализацией на основе вашего предложения. – MaciekR