Tes pengontrol Rspec - cara meneruskan argumen ke metode yang saya uji

Saya ingin menguji metode ini di pengontrol saya.

def fetch_match_displayed_count(params)
  match_count = 0
  params.each do |param|
    match_count += 1 if param[1]["result"] && param[1]["result"] != "result"
  end
  match_count
end

Ini adalah tes yang saya tulis sejauh ini.

describe "fetch_match_displayed_count" do
  it "should assign match_count with correct number of matches" do
    params = {"result_1"=>{"match_id"=>"975", "result"=>"not_match"}, "result_2"=>{"match_id"=>"976", "result"=>"match"}, "result_3"=>{"match_id"=>"977", "result"=>"not_sure"}, "result_4"=>{"match_id"=>"978", "result"=>"match"}, "result_5"=>{"match_id"=>"979", "result"=>"not_match"}, "workerId"=>"123", "hitId"=>"", "assignmentId"=>"", "controller"=>"mt_results", "action"=>"create"}
    controller.should_receive(:fetch_match_displayed_count).with(params)
    get :fetch_match_displayed_count, {params:params}
    assigns(:match_count).should == 5
  end
end

Masalah saya sepertinya terletak pada baris ini get :fetch_match_displayed_count, {params:params} Metode ini mengharapkan params, tetapi hasilnya nihil.

Saya punya dua pertanyaan.

  1. Haruskah metode ini ada di helper dan bukan di controller itu sendiri (sesuai konvensi Rails)?

  2. Bagaimana cara mengirimkan permintaan dapatkan dan lulus params dalam ujian saya?


person Huy    schedule 01.02.2013    source sumber
comment
Apakah ini sebuah tindakan? Saya kira tidak.   -  person zetetic    schedule 01.02.2013
comment
@zetetic Tidak, ini adalah metode yang saya panggil dalam tindakan buat saya.   -  person Huy    schedule 01.02.2013
comment
Saya bisa mengetahui hal ini. Saya harus menjadikan metode ini sebagai metode pribadi dan kemudian mengirimkan permintaan dapatkan pada tindakan create. Kalau begitu, saya hanya bisa mengharapkan hal berikut: controller.should_receive(:fetch_match_displayed_count).with(params).and_return(5)   -  person Huy    schedule 01.02.2013
comment
heh..kalahkan aku beberapa detik. :)   -  person zetetic    schedule 01.02.2013


Jawaban (1)


Sebagai aturan umum, Anda harus menguji antarmuka publik kelas Anda. Untuk pengontrol, ini berarti Anda menguji tindakan, bukan metode pembantu.

Anda harus dapat membuat ini berfungsi dengan menyiapkan satu atau lebih kasus pengujian terpisah yang memanggil tindakan yang sesuai, kemudian menggunakan ekspektasi pesan untuk menguji apakah metode pembantu dipanggil dengan argumen yang tepat -- atau menguji apakah pembantu tersebut metode melakukan apa yang seharusnya dilakukan (mengatur variabel instan/pengalihan/dll).

person zetetic    schedule 01.02.2013
comment
Bagus, terima kasih zetetic. Pertanyaan Anda di postingan saya membantu saya memecahkan masalah ini. - person Huy; 01.02.2013