2017-02-15 27 views
0

У меня есть проект огурца, ruby, siteprism, где мы используем драгоценный камень rspec для проверки ожиданий. Это включено в наш env.rb и успешно используется в определениях шагов.NoMethodError: неопределенный метод `ожидать 'при попытке использовать его в классе SitePrism

Теперь я пытался сделать некоторые утверждения в классе SitePrism, но я получаю сообщение об ошибке. Вы знаете, как я могу использовать эти методы expect()? Я попытался с require 'rspec' плюс include Rspec в файле .rb, который является определение класса SitePrism, но я получил ту же ошибку еще:

expect(local_value).to eq(@previous_value) 
=> Error: NoMethodError: undefined method `expect' for #<xxx_Object @loaded=false> 

Спасибо!

+0

Я включил 'включить RSpec :: Matchers' в классе, и что, кажется, передать 'expect' сообщение об ошибке. Тем не менее, у меня есть еще одно связанное, любое предложение об исправлении этой ошибки или в том числе «ожидать» по-другому? NoMethodError: undefined method 'map 'for # Возможно, вы имели в виду? tap – mickael

ответ

1

Как вы обнаружили (из вашего комментария), вы можете include RSpec::Matchers в своем классе объектов страницы, чтобы получить expect вместе с RSpecs по умолчанию. Один из этих шаблонов называется all, который затем сглаживает метод Capybara :: DSL all, ранее включенный в объект, и создает ошибку, которую вы видите. Способ решения этой проблемы - вызвать версию Capybara all на объекте current_session (page) или псевдоним «find_all». Так all(...).map(...) становится

page.all(...).map(...) # Same as Capybara.current_session.all(...)... 

или

find_all(...).map(...) # or page.find_all ... 
+0

Это связано с другим вопросом, который вы мне помогли в SitePrism. http://stackoverflow.com/questions/42236583/is-it-possible-to-use-siteprism-variables-to-define-new-variables-when-defining/42237203#42237203 Я просто вызывал метод siteprism не зная Капибару. Знаете ли вы, что это можно сделать по-другому, чтобы обойти эту проблему? – mickael

+0

@mickael 'all' не является методом site_prism, это метод Capybara, который site_prism включает в класс объектов страницы. Если вы говорите, что ваш код не вызывает 'all', но где-то в site_prism, вам нужно будет запустить мастер-ветвь site_prism. Был исправлен слияние конца прошлого года, который исправил его - https://github.com/natritmeyer/site_prism/pull/162 –

+0

Я вижу, да, кажется, что site_prism его вызывает при работе с разделами. Еще одно принципиальное сомнение. У меня установлена ​​версия gem версии 2.9 и проверка rubygems.org, похоже, последняя. У вас есть ссылка о том, как я могу обновить свою версию до ведущей ветки, если она не была официально выпущена? (как я полагаю, я мог бы перезаписывать некоторые файлы локально, но фреймворк используется и другими людьми в команде)? – mickael