Ожидания Rspec в Cucumber: неопределенный метод be при использовании внутри класса

Я использую ожидания rspec в структуре огурца, и они отлично выглядят при использовании на уровне определения шагов.

Я настроил свой файл env.rb с помощью:

require 'rspec/expectations'
World(RSpec::Matchers)

Проблема, которую я заметил сейчас, заключается в том, что если я попытаюсь использовать rspec внутри метода объекта, который используется внутри одного из шагов, у меня произойдет сбой.

E.g.
Steps_definition.rb
   service.use_rspec

class Service
   def use_rspec
       header = page.find("div#services h2").text
       header.should (be 'TV')
   end
 end

Error after execution:
 undefined method `be' for #<Service:0x2592570> (NoMethodError)

Любая идея, где проблема может быть?

Я пробовал аналогичное утверждение с Capybara.page.find(...).should have_content('...') внутри этого класса, и "have_content" также не распознается, поэтому не совсем уверен, что происходит: S

Большое спасибо за любой совет!


person mickael    schedule 15.12.2012    source источник
comment
может быть, вам нужен World(RSpec::Expectations)?   -  person rogerdpack    schedule 21.10.2016


Ответы (1)


Ваш класс обслуживания отсутствует в мире, поэтому RSpec::Matchers там недоступен.

У вас есть две возможности:

  1. Включите RSpec::Matchers вручную в этот класс.
  2. Поместите этот класс (или модуль) в World. После этого его методы станут доступны непосредственно в определениях шагов.

Напишите:

class Helpers
  def method
    # Capybara and RSpec::Matchers are available here
  end
end
World{Helpers.new}

or

module Helpers
  def method
    # Capybara and RSpec::Matchers are available here
  end
 end
World(Helpers)
person Andrei Botalov    schedule 15.12.2012
comment
Привет Андрей. Тогда не знаю, где моя проблема. Я поместил созданный модуль, который я поместил в мир, где я создал объект службы, поэтому методы службы были доступны в шагах, это было нормально. Проблема, с которой я столкнулась (даже после того, как попробовала приведенные выше предложения), заключается в том, что #Capybara и Rspec::Matchers не распознаются внутри класса. Если я попытаюсь: include RSpec::Matchers внутри класса, то я получу следующая ошибка undefined method new' для RSpec::Matchers::Pretty:Module Ошибка создания средства форматирования: довольно (NoMethodError)` - person mickael; 15.12.2012
comment
@mikael это работает для меня. Попробуйте начать с нуля. Capybara и RSpec::Matchers доступны внутри модуля или класса, если он помещен в World - person Andrei Botalov; 15.12.2012