Rails5 - 为服务编写单元测试的最佳方法是什么?
Rails5 - what is the best approach for writing unit tests for services?
在我的应用程序中,我有几个服务(纯 ruby)。实施单元测试的最佳方法是什么?我应该为控制器实施额外的单元测试,还是仅为服务创建单独的测试?
更新 - 已实施的解决方案:
- UserService 的专用测试(test/services/user_service_test
- 创建新员工的单元测试包括验证是否调用了 UserService.create_user_for_employee 方法。测试基于 Minitest::Mock。它需要 'minitest/autorun'(在 test_helper 中需要 'minitest/autorun')
员工控制器测试:
setup do
#@employee = employees(:one)
@new_employee = {name: 'name', surname: 'surname', email: 'email@email.com'}
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
您的 /app/services
文件夹中可能有简单的 ruby classes。
然后只需为每个服务编写非常简单的单元测试。
将它们放在 /test/services/
或 spec/services/
文件夹下。
对于您为应用程序定义的每个 class,您应该有一个单元测试文件。
在我的应用程序中,我有几个服务(纯 ruby)。实施单元测试的最佳方法是什么?我应该为控制器实施额外的单元测试,还是仅为服务创建单独的测试?
更新 - 已实施的解决方案:
- UserService 的专用测试(test/services/user_service_test
- 创建新员工的单元测试包括验证是否调用了 UserService.create_user_for_employee 方法。测试基于 Minitest::Mock。它需要 'minitest/autorun'(在 test_helper 中需要 'minitest/autorun')
员工控制器测试:
setup do
#@employee = employees(:one)
@new_employee = {name: 'name', surname: 'surname', email: 'email@email.com'}
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
您的 /app/services
文件夹中可能有简单的 ruby classes。
然后只需为每个服务编写非常简单的单元测试。
将它们放在 /test/services/
或 spec/services/
文件夹下。
对于您为应用程序定义的每个 class,您应该有一个单元测试文件。