Ескейпиране на число или низ в кавички от израза Gherkin

Ако имам такава клауза в моята дефиниция на функция:

Then I can see the "/relative-url-path" page

Краставицата ще наложи този метод:

@When("^I can see the \"([^\"]*)\" page$")
public void I_open_the_page(String arg1) {
    // Express the Regexp above with the code you wish you had
    throw new PendingException();
}

Ако искам да подчертая относителната част на URL с кавички, как мога да принудя анализатора на корнишони да интерпретира THEN close като "обикновен низ". С други думи, мога ли да го избягам по някакъв начин?

Същият въпрос в случай, че имам номер?


person Artem Oboturov    schedule 13.04.2012    source източник


Отговори (2)


Първо, не мисля, че трябва да има знак @ пред вашето „Кога“, ако използвате Ruby за вашите дефиниции на стъпки. Това може да ви създава проблеми (не знам.) Ако не използвате Ruby, би било полезно да знаете какъв език използвате за вашите дефиниции на стъпки.

Мога да ви кажа какво направих с път към файл в кавички:

When I upload invoice "C:\Ruby193\automation\myfile.txt"

Тогава използвах този код:

When /^I upload invoice "(.*)"$/ do |filename|
  @upload_invoice_page = UploadInvoicePage.new(@test_env)
  @upload_invoice_page.upload_file(filename, 'BIRD, INC.')
end

Следвайки този пример, в Ruby бих опитал този код за вашата стъпка:

When /^ can see the "(.*)" page$/

Вашият код изглежда като може би Java, така че може да изглежда нещо като:

@When("^I can see the \"(.*)\" page$")

Можете да поставите по-сложен Regex там, но тъй като това е стъпка Gherkin, всъщност нямате нужда от него. Изглежда, че в момента се опитвате да получите нещо, което не е двойни кавички. Не е необходимо да правите това, тъй като Regex вече търси отворена и затворена котировка.

Имайте предвид, че можете също да се отървете напълно от кавичките:

Then I can see the /relative-url-path page

@When("^I can see the (.*) page$")

Запазете кавичките само ако смятате, че е по-четливо за хората. За повече информация относно регулярните изрази

За да съпоставите само числа, бихте направили:

Then I can see the 123456

@Then("^I can see the (\d*)$")

Намерих Cucumber Regex на Richard Lawrence Cheatsheet много полезен. Там ще намерите повечето модели, от които се нуждаете. Ако имате нужда от по-сложни модели, можете да помислите дали е по-добре да направите тази оценка във вашия код за дефиниране на стъпки.

person Doug Noel    schedule 16.04.2012
comment
Съжалявам: използвах Java add не го прецизира в тагове. - person Artem Oboturov; 16.04.2012
comment
Въпросът беше за възможността за бягство, но не и за общата употреба на корнишон или краставица. - person Artem Oboturov; 16.04.2012
comment
Съжалявам, че съм разбрал погрешно. Мисля, че задавате специфичен за Java въпрос. Опитайте следния регулярен израз: \"([^"]*)\" На мястото на \"([^\"]*)\". Не е необходимо да включвате обратна наклонена черта в Regex (поне въз основа на моите тестове с Rubular), за да получите същия резултат, освен ако Java не премахва цитата. - person Doug Noel; 16.04.2012
comment
Предложеният от вас вариант ще ограничи края на String литерала в Java. И следователно изобщо няма да се компилира. - person Artem Oboturov; 16.04.2012
comment
Има ли причина това да не работи? @When("^I can see the \"(.*)\" page$") - person Doug Noel; 16.04.2012
comment
Това ще улови всички имена на страници, които мога да си представя. Не е това, което искам. - person Artem Oboturov; 17.04.2012
comment
Той ще улови всички знаци в кавичките. Точно какво трябва да прави другият ви регулярен израз, освен че ще улавя и кавички. Можете ли да дадете повече подробности какво искате да изключите и включите в тези цитати? - person Doug Noel; 17.04.2012
comment
като обикновен низ имам предвид да използвам регулярен израз, който ще бъде точно фразата - не част от нея. - person Artem Oboturov; 17.04.2012
comment
нека да продължим тази дискусия в чата - person Doug Noel; 17.04.2012

Въз основа на дискусията изглежда, че искате група без прихващане. Това ще ви позволи да посочите произволен URL адрес, но напълно да го игнорирате в действителната стъпка (т.е. не се предава като параметър).

Поставянето на ?: в началото на група ще я направи група без прихващане.

@When("^I can see the \"(?:[^\"]*)\" page$")
public void I_open_the_page() {
    // Express the Regexp above with the code you wish you had
    throw new PendingException();
}
person Justin Ko    schedule 19.04.2012
comment
Моята мисъл е НАИСТИНА проста: искам да имам Gherkin израз като Given, че мога да видя страницата something.com и да имам метод като public void I_can_open_something_page. От друга страна също бих искал да има израз, като се има предвид, че виждам страницата anotherpage.com и това трябва да бъде насочено към друг метод. - person Artem Oboturov; 20.04.2012