#ruby-on-rails #ruby-on-rails-4 #cucumber #capybara #minitest
#ruby-on-rails #ruby-on-rails-4 #огурец #capybara #минимальный тест
Вопрос:
я использую следующее:
minitest 5.3.5
cucumber 1.3.15
capybara 2.3.0
capybara_minitest_spec 1.0.2
rails 4.1.1
cucumber-rails 1.4.1
и мой код cucumber / capybara
Then(/^I should see "(.*?)"$/) do |string|
page.has_content?(string)
end
с любой строкой, независимо от того, находится она на странице или нет, возвращает true . Я попытался использовать драгоценный камень capybara_minitest_spec, и мой код становится
Then(/^I should see "(.*?)"$/) do |string|
page.must_have_content(string)
end
тогда у меня ошибка
Then I should see "Test" # features/step_definitions/pages_steps.rb:9
undefined method `assert_page_has_content' for nil:NilClass (NoMethodError)
(eval):4:in `must_have_content'
./features/step_definitions/pages_steps.rb:10:in `/^I should see "(.*?)"$/'
features/can_access_home.feature:7:in `Then I should see "Test"'
Так странно. С помощью save_and_open_page я вижу свою страницу без каких-либо проблем. Не могли бы вы помочь мне, пожалуйста, исправить это?
PS: я использую minitest, но не rspec
Ответ №1:
Я исправил проблему со следующим
Then(/^I should see "(.*?)"$/) do |string|
assert page.has_content?(string)
end
Комментарии:
1. Да, вы должны утверждать. За исключением того, что здесь нет причины, по которой страница определена правильно и равна нулю при использовании
page.must_have_content(string)
. Можете ли вы дважды проверить, что эта вторая форма не работает?2. неопределенный метод `must_have_content’ для #<Capybara::Session> (NoMethodError) :(((
3. Ну, это отличается от вашей первоначальной ошибки 🙂 Вероятно, вам нужно включить сопоставители где-нибудь в вашей настройке cucumber. В любом случае, использование
assert
так же хорошо.
Ответ №2:
Then(/^I should see "(.*?)"$/) do |string|
page.has_content?(string)
end
Это не утверждение, это метод, который возвращает логическое значение. Утверждения генерируют исключения, что приводит к сбою теста.
Если вы хотите подтвердить существование вашей строки, вы должны использовать :
Then(/^I should see "(.*?)"$/) do |string|
assert page.has_content?("Home#index")
end
page.must_have_content
на самом деле делает то же самое, за исключением того, что ваша ошибка говорит page
о nil .
Комментарии:
1. У меня есть неопределенный метод `expect’ для #<Cucumber::Rails::World:0x007f85bd7d96d8> (NoMethodError) для вашего последнего примера
2. Мой плохой, я не знаю, почему я думал, что вы используете rpsec. Ну, первое наблюдение все еще остается в силе, но есть проблема с посещением. Обновление anwser.
3. Хорошо, мы не знаем, почему
page
не было определено при первой попытке использования#must_have_content
. Я все же оставляю этот ответ для дальнейшего ознакомления, поскольку он объясняет, что вы должны утверждать свои ожидания, а не просто возвращать логическое значение.