Saya ingin menghentikan panggilan ke komponen pihak ketiga, tetapi menemukan ini cukup menantang dalam uji mini Rails. Saya akan mulai dengan pertanyaan paling mendasar di atas. Berikut ini beberapa kode semu yang sangat disederhanakan untuk menjelaskan dengan lebih baik apa yang saya coba lakukan:
class RequestController < ActionController::Base
def schedule
# Parse a bunch of params and validate
# Generate a unique RequestId for this request
# Save Request stuff in the DB
# Call 3rd party scheduler app to queue request action
scheduler = Scheduler.new
submit_success = scheduler.submit_request
# Respond to caller
end
end
Jadi saya sedang menulis tes integrasi untuk RequestController dan saya ingin menghentikan panggilan 'scheduler.submit_request'. Kode pengujian saya terlihat seperti ini:
def test_schedule_request
scheduler_response = 'Expected response string for RequestId X'
response = nil
Scheduler.stub :submit_request, scheduler_response do
# This test method calls the RequestController schedule route above
response = send_schedule_request(TEST_DATA)
end
# Validate (assert) response
end
Tampaknya cukup mudah, tetapi tampaknya saya tidak dapat menghentikan metode untuk kelas yang belum ada (belum). Jadi bagaimana cara mematikan metode kelas untuk objek yang dibuat saat run-time dalam kode yang saya uji?