2016-08-19 4 views
0

Dieser Schritt in meinem Ruby-Feature-Datei einen Kundendatensatz zu finden und Zugang:Gurke arity Mismatch Fehler

When I search with the following details: "<recordReference>", "<secondIdentifier>", "<postcode>": 
    | recordReference | secondIdentifier| postcode | 
    | REFABCDE12345678| IDcode1234  | PC11 1PC | 

Es hat diesen Schritt Definition:

When(/^I search with the following details: "(.*?)", "(.*?)", "(.*?)":$/) do |recordReference, secondIdentifier, postcode| 
    find(:css, "#dln").native.send_keys recordReference 
    find(:css, "#nino").native.send_keys secondIdentifier 
    find(:css, "#postcode").native.send_keys postcode 
    check 'confirmation' 
    click_button 'submit' 
end 

Wenn es laufen gelassen, erhalte ich die folgende Fehler:

Cucumber::ArityMismatchError: Your block takes 3 arguments, but the Regexp matched 4 arguments. 
features/step_definitions/refactored_commands.rb:207:in `/^I search with the following details: "(.*?)", "(.*?)", "(.*?)":$/' 

Was habe ich falsch gemacht und wie kann es behoben werden?

Für Infos - ich erhalte die gleiche Fehlermeldung, wenn der parenthases aus der Schrittdefinition nehmen ist:

When /^I search with the following details: "(.*?)", "(.*?)", "(.*?)":$/ do |recordReference, secondIdentifier, postcode| 

Antwort

1

Das vierte Argument die Datentabelle ist. Entfernen Sie die ersten 3 Parameter und fügen Sie nur die DataTable-Option ein. Sie erhalten alle Daten von der DataTable. Ich schlage vor, dass Sie die Option dryRun = true verwenden, damit Cucumber den richtigen Schrittdefinitions-Matcher erstellt. Dies ist von meinem Java-Wissen her nicht bekannt, wie diese dryRun-Option in Ruby ist. plus Sie werden die erwähnten drei Parameter

0

Es sieht aus wie Sie Vertauschen Szenario skizziert mit dem Übertragen von Datentabellen zu den Schritten

Aus dem Format der Tabelle, es zu entfernen, um Ihren Schritt in der Feature-Datei zu ändern sieht aus wie, was Sie eigentlich vor sich geht

Scenario Outline: xxx 
    ... 
    When I search with the following details: "<recordReference>", "<secondIdentifier>", "<postcode>" 
    ... 

    Examples: 
    | recordReference | secondIdentifier| postcode | 
    | REFABCDE12345678| IDcode1234  | PC11 1PC | 

und dann jeweils die Kontur wird einmal aufgerufen werden für jede Reihe der Beispiele mit den gefüllten Werte in sein sollte - so würde Ihr Schritt

When(/^I search with the following details: "(.*?)", "(.*?)", "(.*?)"$/) do |recordReference, secondIdentifier, postcode| 
    ... 
end 

Auf einer seitliche Anmerkung - Gibt es einen Grund, warum Sie .native.send_keys Aufruf sind - ich glaube, jetzt jeder Fahrer der normalen Capybara send_keys API unterstützt, so dass es nur find(:css, '#dln').send_keys recordReference (oder natürlich nur fill_in('dln', with: recordReference)) wäre