2015-06-02 7 views
5

Mein Mock funktioniert nur, wenn es in dem vorher gezeigten Block ist. Dies ist nur meine schnelle und schmutzige Darstellung meines Problems. Wahrsten Sinne des Wortes, wenn ich die Linie von dem vor-Block auf die Behauptung does not quack bewegen, stoppt er spöttisch :(`allow_any_instance_of` Mock funktioniert nicht im Bereich

describe 'Ducks', type: :feature do 
    before do 
    ... 
    allow_any_instance_of(Duck).to receive(:quack).and_return('bark!') 
    visit animal_farm_path 
    end 

    context 'is an odd duck' 
    it 'does not quack' do 
     expect(Duck.new.quack).to eq('bark!') 
    end 
    end 
end 

Ich will es hier, aber es funktioniert nicht:

describe 'Ducks', type: :feature do 
    before do 
    ... 
    visit animal_farm_path 
    end 

    context 'is an odd duck' 
    it 'does not quack' do 
     allow_any_instance_of(Duck).to receive(:quack).and_return('bark!') 
     expect(Duck.new.quack).to eq('bark!') 
    end 
    end 
end 
+0

Erhalten Sie irgendwelche Fehler? –

+0

Können Sie nach dem Anruf 'Duck.new.quack' erwarten? –

+0

Nein. Gerade wenn meine 'quack' Methode im oberen Beispiel aufgerufen wird, gibt es' bark! 'Zurück, aber nicht wenn' all_instance_of (Duck) ... 'in den' it' Block verschoben wird. – cdpalmer

Antwort

7

Mein schlechtes Die. Original Frage schlecht geschrieben wurde. die Seite zu besuchen ist, was den #quack Anruf tätigt. die Mocks immer getan werden muss, bevor Sie das tun, was auch immer es ist, dass der Methodenaufruf eingreift. das also war meine Lösung

describe 'Ducks', type: :feature do 
    before do 
    ... 
    end 

    context 'is an odd duck' 
    it 'does not quack' do 
     allow_any_instance_of(Duck).to receive(:quack).and_return('bark!') 
     visit animal_farm_path 

     # In this crude example, the page prints out the animals sound 
     expect(page).to have_text('bark!') 
    end 
    end 
end 
+0

cool +1 ......... :) –

+0

Bitte markieren Sie Ihre Antwort als Antwort. –

+0

Andy: Stack Overflow lässt mich 2 Tage warten, bevor ich das tue. Gib mir Zeit, Mann! ;) – cdpalmer

Verwandte Themen