Cum să spui „should_receive” de mai multe ori în RSpec (Programare, Ruby Pe Șine, Rspec)

Jakub Arnold a intrebat.

Am acest lucru în testul meu

Project.should_receive(:find).with(@project).and_return(@project)

dar atunci când obiectul primește apelul acelei metode de două ori, trebuie să fac

Project.should_receive(:find).with(@project).and_return(@project)
Project.should_receive(:find).with(@project).and_return(@project)

Există vreo modalitate de a spune ceva de genul

Project.should_receive(:find).with(@project).and_return(@project).times(2)

4 răspunsuri
Staelen

Acest lucru este depășit. Vă rugăm să verificați răspunsul lui Uri de mai jos

pentru 2 ori:

Project.should_receive(:find).twice.with(@project).and_return(@project)

de exact n ori:

Project.should_receive(:find).exactly(n).times.with(@project).and_return(@project)

de cel puțin n ori:

Project.should_receive(:msg).at_least(n).times.with(@project).and_return(@project)

mai multe detalii la https://www.relishapp.com/rspec/rspec-mocks/v/2-13/docs/message-expectations/receive-counts la Numărătoare de recepție

Sper că vă ajută =)

Comentarii

  • Se pare că poate nu funcționează cu any_instance? –  > Por Jared Beck.
  • @YoLudke Nu știu…  > Por Jared Beck.
  • Ar trebui să folosiți noua sintaxă menționată în răspunsul lui Uri. –  > Por theblang.
Uri Agassi

Noua expect sintaxă a rspec va arăta în felul următor:

de 2 ori:

expect(Project).to receive(:find).twice.with(@project).and_return(@project)

pentru exact n ori:

expect(Project).to receive(:find).exactly(n).times.with(@project).and_return(@project)

pentru cel puțin n ori:

expect(Project).to receive(:msg).at_least(n).times.with(@project).and_return(@project)

Comentarii

  • have_received funcționează, de asemenea, și sintaxa expect(Project).to have_received(:find).exactly(n).times etc. –  > Por David Tuite.
Prasanna

@JaredBeck a subliniat. Soluția nu a funcționat pentru mine pe any_instance apel.

Pentru orice instanță am ajuns să folosesc stub în loc de should_receive.

Project.any_instance.stub(:some_method).and_return("value")

Acest lucru va funcționa pentru orice nr. de ori totuși.

Comentarii

  • stackoverflow.com/questions/24595203/… –  > Por Uri Agassi.
amnsan

should_receive, spre deosebire de any_instance, se așteaptă ca clasa să primească mesajul de numărul de ori specificat.

any_instance pe de altă parte, este utilizat în general pentru a stopa o metodă.

Așadar, primul caz este o așteptare pe care am dori să o testăm, în timp ce al doilea este trecerea unei metode pe linia următoare, astfel încât să putem merge mai departe.

Comentarii

  • Drenmi, apreciez timpul pe care ți l-ai luat pentru a adăuga câteva virgule la o postare pe care o adăugasem cu aproape un an în urmă… Nu părea să se fi schimbat nimic în ceea ce privește aspectul tehnic al răspunsului… De ce m-ați votat negativ pentru asta…? –  > Por amnsan.