Capybara терпит неудачу на Capybara :: ElementNotFound во время теста на огурец - PullRequest
1 голос
/ 19 февраля 2012

Недавно я получил небольшой Rails-проект, который поможет мне изучить среду и связанные с ней языки / инструменты (Ruby, Cucumber, RSpec, Haml ...).

Что меня заставилоВ последнее время я застрял в том, что я решил перейти от одного сценария к множественному, как показано в этой сути .Когда я представил второй сценарий, я заметил, что общие значения минеральных куч не были суммированы, это вызвано тем, что определение шага для «Я добыл этот минерал» выглядело так:

Given /^I have mined "([^"]*)" of that mineral$/ do |amount|
  visit(root_path)
  fill_in(@mineral.name, :with => amount)
end

Очевидно, виновником был вызов visit (root_path), который сбрасывал уже заполненные поля, как только должно было быть заполнено новое поле. Однако важно отметить, что помимо факта «Total value:» не удалось вВ конце все тесты были зелеными.

Я решил, что, поскольку все, что сделано в этой функции, требует, чтобы один был на странице index / root (я, вероятно, изменю это позже)просто поместите его в блок Background:.Соответствующее определение шага является не чем иным, как строкой посещения (root_path), извлеченной в свой собственный шаг.

Однако это привело к сбою каждого вызова fill_in () со следующим (или что-то очень похожим):

cannot fill in, no text field, text area or password field with id, name, or label 'tritanium' found (Capybara::ElementNotFound)
(eval):2:in `fill_in'
./features/step_definitions/miner_converts_minerals.rb:12:in `/^I have mined (\d+) of that mineral$/'
features/miner_converts_minerals.feature:12:in `And I have mined <amount> of that mineral'

Я считаю, что по какой-то причине посещение страницы в Background: не является постоянным, и она забывает, что попала туда ... по какой-то причине.Обратите внимание, что (как упомянуто выше) все перестает работать, как только визит (root_path) выходит из «Я добыл ...» - шаг в отдельный шаг, заставляя меня предположить, что визит должен быть сделан в том же самомблок, но я могу ошибаться.

РЕДАКТИРОВАТЬ: Я пытался использовать метод save_and_open_page, чтобы посмотреть, что на самом деле отображается на этой странице, что Капибара не может найти элементы на.Оказывается, кнопка «Рассчитать» есть, но нет ни одного поля в таблице.Похоже, проблема заключается в том, что поля не генерируются.

Я думаю, что весь соответствующий код для решения этой проблемы можно найти в вышеупомянутой сущности.Спасибо за чтение!

1 Ответ

1 голос
/ 22 февраля 2012

Оказалось, что это в основном связано с тем, что в тестовой базе данных была таблица для Mineral, но не было импортировано ни одной строки.

Это, в свою очередь, привело к тому, что метод find_or_create_by_name смог создатьминералы, упомянутые в тестах, но не другие, создавая иллюзию некоторой работы при добавлении вызова visit(root_path) в "Given I have mined..." -блок (в файле .feature).

Решениедолжен был правильно заполнить тестовую базу данных и затем использовать find_by_name вместо find_or_create_by_name.

...