2017-12-28 6 views
1

App getestet werden: CakePHP App läuft auf einem Vagrant vmFernprüfung mit Capybara-mechanize: Form Einreichung Ergebnisse in falscher URL (404 => Net :: HTTPNotFound)

App die Prüfung tun: lokal (im Grunde leer) Rails-Anwendung mit capybara-mechanize

10 examples, 1 failure 

Der Fehler ist:

404 => Net::HTTPNotFound 

Lassen Sie uns sagen, dass meine vm die App auf

läuft, hat

Das Fehlerszenario wird auf der Homepage angezeigt, meldet sich an, klickt auf Neues erstellen, füllt das Formular aus und klickt auf Speichern.

Der Test sucht dann nach den Informationen, die auf der zurückgegebenen Seite sein sollten (wenn sie korrekt gespeichert wurden).

Der Code läuft bis zur Formularübergabe ohne Probleme, aber dann wird die Speicherung der URL seltsam.

Statt von

gehen
'www.domain.comx/something/new' 

zu

'www.domain.comx/something/create' 

Es wird

'www.domain.comx/something/something/create' 

und den Fehler zu werfen.

Irgendwo im Code gibt es einen Ort, an dem es das "Etwas" in der URL dupliziert.

Was könnte dieses Problem verursachen?

Ich habe versucht, in Redirects und Dinge zu suchen, aber ich kann nicht scheinen, eine Lösung zu finden.

Die App ist live und wurde von einem Team von 25 (ish) Menschen seit fast 5 Jahren verwendet. Der Test sollte bestanden werden.

Hier ist die Spur, falls das hilft:

# /Users/ViviPoit/.rvm/gems/ruby-2.3.0/gems/capybara-mechanize-1.5.0/lib/capybara/mechanize/browser.rb:125:in `rescue in process_remote_request' 
# /Users/ViviPoit/.rvm/gems/ruby-2.3.0/gems/capybara-mechanize-1.5.0/lib/capybara/mechanize/browser.rb:103:in `process_remote_request' 
# /Users/ViviPoit/.rvm/gems/ruby-2.3.0/gems/capybara-mechanize-1.5.0/lib/capybara/mechanize/browser.rb:43:in `block (2 levels) in <class:Browser>' 
# /Users/ViviPoit/.rvm/gems/ruby-2.3.0/gems/capybara-2.16.1/lib/capybara/rack_test/browser.rb:69:in `process' 
# /Users/ViviPoit/.rvm/gems/ruby-2.3.0/gems/capybara-2.16.1/lib/capybara/rack_test/browser.rb:41:in `process_and_follow_redirects' 
# /Users/ViviPoit/.rvm/gems/ruby-2.3.0/gems/capybara-2.16.1/lib/capybara/rack_test/browser.rb:32:in `submit' 
# /Users/ViviPoit/.rvm/gems/ruby-2.3.0/gems/capybara-2.16.1/lib/capybara/rack_test/form.rb:80:in `submit' 
# /Users/ViviPoit/.rvm/gems/ruby-2.3.0/gems/capybara-mechanize-1.5.0/lib/capybara/mechanize/node.rb:8:in `click' 
# /Users/ViviPoit/.rvm/gems/ruby-2.3.0/gems/capybara-2.16.1/lib/capybara/node/element.rb:143:in `block in click' 
# /Users/ViviPoit/.rvm/gems/ruby-2.3.0/gems/capybara-2.16.1/lib/capybara/node/base.rb:85:in `synchronize' 
# /Users/ViviPoit/.rvm/gems/ruby-2.3.0/gems/capybara-2.16.1/lib/capybara/node/element.rb:143:in `click' 
# /Users/ViviPoit/.rvm/gems/ruby-2.3.0/gems/capybara-2.16.1/lib/capybara/node/actions.rb:25:in `click_link_or_button' 
# /Users/ViviPoit/.rvm/gems/ruby-2.3.0/gems/capybara-2.16.1/lib/capybara/session.rb:810:in `block (2 levels) in <class:Session>' 
# /Users/ViviPoit/.rvm/gems/ruby-2.3.0/gems/capybara-2.16.1/lib/capybara/dsl.rb:50:in `block (2 levels) in <module:DSL>' 

Hier ist eine verdummte Version des HTML-Formulars:

<form id="create" method="post" action="something/create"> 

    <div class="form-group col-md-4"> 
    <div class="form-group"> 
    <label for="usuario_email">E-mail *</label> 
    <input type="email" name="data[usuario][email]" id="usuario_email" class="form-control"> 
    </div> 
    </div> 

    <div class="form-group col-md-4"> 
    <label for="usuario_nome">Nome *</label> 
    <input type="text" name="data[usuario][nome]" id="usuario_nome" class="form-control"> 
    </div> 

    <div class="form-group col-md-4"> 
    <label for="usuario_telefone">Telefone *</label> 
    <input type="text" name="data[usuario][telefone]" id="usuario_telefone" class="form-control" alt="phone"> 
    </div> 

    <div class="form-group col-md-6"> 
    <div class="pull-right"> 
    <button type="submit" class="btn btn-success btn-lg" id="salvar"> 
    <span class="glyphicon glyphicon-ok"></span> 
    </button> 
    </div> 
    </div> 

</form> 
+0

Was ist der HTML-Code des Formulars? –

+0

Ich habe gerade die HTML des Formulars zur Frage hinzugefügt. – vivipoit

Antwort

1

Diese richtig Weg, da die Aktion relativ zu handeln scheint, ist . Für das erwartete Verhalten müsste das Formularaktionsattribut "create" (relativ), "/ something/create" (absolut) oder "../irgendwas/create" (relativ) sein, je nachdem, ob Sie es sind oder nicht Verwenden Sie das gleiche Formular bei verschiedenen URLs und wie es sich bei diesen auch verhalten soll.

+0

Perfekt. Vielen Dank! Das Ändern der Aktion des Formulars in "/ some/create" hat funktioniert. – vivipoit

Verwandte Themen