2016-03-27 4 views
0

Ich schreibe eine Rails App Anwendung BDD mit RSpec & Capybara. Einer meiner Tests scheitert weiterhin. Das Ziel des Tests besteht darin, zu prüfen, ob für jeden Maschinendatensatz, der auf der Indexseite angezeigt wird, durch Klicken auf den Bearbeitungslink die Detailbearbeitungsseite angezeigt wird. Wenn ich meine Anwendung ausführe, funktioniert diese Funktionalität. Ich denke, mit meinem RSpec-Szenario stimmt etwas nicht.RSpec/Capybara "expect (page) .to have_content" -Test schlägt fehl, während der Inhalt in page.html ist

Hier ist der Fehler-Test:

Failures: 

    1) existing machines have a link to an edit form 
    Failure/Error: expect(page).to have_content(@existing_machine.model) 
     expected to find text "RX22" in "Toggle navigation uXbridge Catalogue Settings Brands Machine Types Machine Groups Repair States Titles User Signed in as [email protected] Sign out Machine details Brand TORO Model Machine type ZITMAAIER Description Engine Purchase Price Unit Price VAT Minimal Stock Current Stock Warehouse Location" 
# ./spec/features/machine_spec.rb:50:in `block (2 levels) in <top (required)>' 

Hier ist der Code des Tests:

RSpec.feature 'existing machines' do 
    before do 
    @john = User.create!(email: '[email protected]', password: 'password') 

    login_as @john 
    brand = Brand.create!(name: 'TORO') 
    machinegroup = Machinegroup.create!(name: 'GAZON') 
    machinetype = Machinetype.create!(name: 'ZITMAAIER', machinegroup_id: machinegroup.id) 
    @existing_machine = Machine.create!(brand_id: brand.id, model: 'RX22', machinetype_id: machinetype.id, description: 'fantastic machine', engine: '100PK') 
    end 

    scenario 'have a link to an edit form' do 
    visit '/machines' 
    find("a[href='/machines/#{@existing_machine.id}/edit']").click 
    expect(page).to have_content('Machine details') 
    expect(page).to have_content(@existing_machine.model) 
    end 
end 

Wenn das Szenario Debuggen, das @existing_machine Objekt durch die .Create richtig bevölkert scheint (Methode) im Vorher blockieren.

screenshot of debug window in IDE

Wenn die seite.html im Debugger die Kontrolle, ich sehe die "RX22" string erscheint.

screenshot of page.html inspection

Warum also RSpec/Capybara nicht den gleichen Inhalt sehen, wenn die Ausführung erwarten (Seite) .to have_content (@ existing_machine.model)?

Antwort

0

RX22 ist der Wert eines Eingabeelements, kein Textinhalt, daher müssen Sie es anders prüfen. So etwas wie

expect(page).to have_field('Model', with: 'RX22') 

sollte

+0

Dank viel Arbeit! Es klappt! Spaß zu lernen. – lbaeyens

Verwandte Themen