2012-04-16 2 views
4

у меня есть:Как отлаживать тесты огурца?

When /^(?:|I)follow "([^"]*)"(?: within "([^"]*)")?$/ do |link, selector| 
    with_scope(selector) do 
    click_link(link) 
    end 
end 

который я звонить из:

Background: 
    Given I am an existing admin user 
    When I follow "CLIENTS" 

мой HTML выглядит так:

<a class="active" href="/companies"><h2>CLIENTS</h2></a> 

и я получаю эту ошибку:

.F-.F--U-----U 

(::) failed steps (::) 

no link with title, id or text 'CLIENTS' found (Capybara::ElementNotFound) 
(eval):2:in `click_link' 
./features/step_definitions/web_steps.rb:54:in `block (2 levels) in <top (required)>' 
./features/step_definitions/web_steps.rb:14:in `with_scope' 
./features/step_definitions/web_steps.rb:53:in `/^(?:|I)follow "([^"]*)"(?: within "([^"]*)")?$/' 
features/client_add.feature:8:in `When I follow "CLIENTS"' 

Я попробовал несколько вещей из:

When I follow "<h2>CLIENTS</h2>" 

и даже попробовал save_and_open_page, который должен открыть браузер и все еще получить те же результаты:

Given /^I am an existing admin user$/ do 
    role_user = FactoryGirl.create(:role_user) 
    admin_user = role_user.user 
    sign_in(admin_user) 
    save_and_open_page 
end 

Есть ли способ, чтобы напечатать HTML или каким-то образом выяснить, почему мой тест не работает?

+0

использовать capybara's save_and_open_page, как указано на http://berk.es/2013/01/08/make-cucumber-open-the-browser-with-the-current-page/ – deepak

+0

также использовать pry_remote (https://github.com/Mon-Ouie/pry-remote) для отладки в тесте функции. может потребоваться сон, так что тайм-аут не произойдет в спецификации – deepak

ответ

7

Мой любимый способ отладки шагов огурца - это вызов binding.pry.

Убедитесь, что драгоценный камень pry включен в ваш файл gem для :development, test, а затем поместите вызов binding.pry прямо перед строкой, которая выдает ошибку. Затем вы должны иметь возможность интроспекции среды с помощью команды ls, и если вы можете найти сеанс capybara, вы можете (если сеанс capybara хранится как переменная с именем) page.html и page.text, чтобы увидеть, что видно.

Надеюсь, что это поможет.

0

Ваш тест не работает, потому что вам нужно перейти на страницу (откройте ее). Вы можете использовать водосвинку встроенный в методе, чтобы сделать это:

visit path_to(url) 

Также вы можете отлаживать с помощью стандартного рубинового отладчика. См. Руководство this rails guide, чтобы получить дополнительную информацию.

0

для моего опыта:

  • Во-первых, вы должны использовать метод «save_and_open_page» в водосвинки, чтобы проверить, что находится на этой странице, и рассмотрим и посмотреть, что делают на правую страницу, которую вы ожидаете или нет. (Я думаю, что страница «КЛИЕНТЫ» ссылка пока не отображать)
  • Второе: Вы можете изменить путь маршрута, который перенаправляет на страницу имеет «КЛИЕНТЫ» ссылка

надеюсь, это поможет вам.

p/s: если вы следуете моей инструкции, но это не сработает. Pls дает мне вашу функцию и определение шага. Я постараюсь помочь вам, что смогу

1

Добавление следующего содержания содержимого/поддержки/отладки.гь может быть полезно при отладке провала попытки шагов:

# `LAUNCHY=1 cucumber` to open page on failure 
After do |scenario| 
    save_and_open_page if scenario.failed? && ENV['LAUNCHY'] 
end 

# `FAST=1 cucumber` to stop on first failure 
After do |scenario| 
    Cucumber.wants_to_quit = ENV['FAST'] && scenario.failed? 
end 

# `DEBUG=1 cucumber` to drop into debugger on failure 
After do |scenario| 
    next unless ENV['DEBUG'] && scenario.failed? 
    puts "Debugging scenario: #{scenario.title}" 
    if respond_to? :debugger 
    debugger 
    elsif binding.respond_to? :pry 
    binding.pry 
    else 
    puts "Can't find debugger or pry to debug" 
    end 
end 

# `STEP=1 cucumber` to pause after each step 
AfterStep do |scenario| 
    next unless ENV['STEP'] 
    unless defined?(@counter) 
    puts "Stepping through #{scenario.title}" 
    @counter = 0 
    end 
    @counter += 1 
    print "At step ##{@counter} of #{scenario.steps.count}. Press Return to"\ 
     ' execute...' 
    STDIN.getc 
end 

Установив переменное окружение, вы можете вызвать Огурцы использовать различные инструменты отладки, и вы можете комбинировать их с помощью установки нескольких переменных окружения.

+0

Это отлично работает, спасибо. Вы можете установить переменные среды непосредственно в командной строке. Например, «функции bin/oucumber/mytest.feature LAUNCHY = 1 ' или установить их для всего сеанса терминала с помощью ' export LAUNCHY = 1 ' – CodeKid

Смежные вопросы