0
私のアプリでは、サーバーサービス(純粋なルビー)があります。ユニットテストを実装する最良の方法は何ですか? shoiuld私はコントローラーの追加ユニットテストを実装するか、サービスのためにのみ分離テストを作成しますか?Rails5 - サービスの単体テストを書くための最良の方法は何ですか?
アップデート - 実装溶液:UserServiceのため
- 専用テスト(UserService.create_user_for_employeeメソッドが呼び出される場合は、新しい従業員を作成するための試験/サービス/ user_service_test
- ユニットテストは、検証を含む試験は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
thx - これが私が最高の解決策であると考えていたものです。しかし、1つの問題があります。 UserService.new.create_user(@employee)メソッドを呼び出すemployee.saveの後ろにあるemployee_controllerの内側に、新しい従業員ごとにユーザーアカウントを自動的に作成するとします。この場合、私のテストでは、 "create_employee"を呼び出す必要があります。私は、UserServiceメソッドが呼び出されるべきだと主張する必要があります。 - しかし、私がhttp://edgeguides.rubyonrails.org/testing.htmlを見ているとき、そのアサーションは表示されませんどのようにそれを行うにはどのようなアイデア? – MaciekR
@MaciekRあなたが探しているものはモックです。 'Test :: Unit'を使っているなら、Mochaを含めて' UserService.expects(:new).once'と書くことができます。 Rspecでは 'expect(UserService).to receive(:new)'のようになります。 –
thx - 私はあなたの提案に基づいて実装で質問を更新しました。 – MaciekR