2012-04-02 3 views
32

Czy istnieje sposób na metodę stub dla tylko określonych argumentów. Coś takiegoMetoda stubsowania tylko dla określonych argumentów

boss.stub(:fire!).with(employee1).and_return(true) 

Jeśli jakikolwiek inny pracownik przechodzi do boss.fire! metodzie Wezmę boss received unexpected message błąd, ale to, co naprawdę chciałbym tylko, aby zastąpić metodę dla konkretnego argumentu, i zostawić to dla wszystkich innych .

Jakieś pomysły, jak to zrobić?

Odpowiedz

51

Możesz dodać domyślny niedopałek dla metody fire! które nazywamy oryginalna realizacja:

boss.stub(:fire!).and_call_original 
boss.stub(:fire!).with(employee1).and_return(true) 

rspec 3 Składnia (@ pk-nb)

allow(boss).to receive(:fire!).and_call_original 
allow(boss).to receive(:fire!).with(employee1).and_return(true) 
+0

dzięki andrey, dokładnie to, czego szukałem –

+0

Czysty sposób na stub. dzięki. – bragboy

+12

To samo ze składnią RSpec 3: 'allow (boss) .to otrzymać (: fire!). And_call_original allow (boss) .to otrzymać (: fire!). With (employee1) .and_return (true)' –

2

Można spróbować napisać własną metodę stubbing, z kodem jak ten

fire_method = boss.method(:fire!) 
boss.stub!(:fire!) do |employee| 
    if employee == employee1 
    true 
    else 
    fire_method.call(*args) 
    end 
end