Cucumber中的Rspec期望:在类中使用时未定义的方法'be'

时间:2012-12-15 13:46:07

标签: rspec cucumber capybara rspec-expectations

我在黄瓜框架中使用了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(...)中尝试了类似的断言。在该类中应该有has_content('...')并且'have_content'也不被识别,所以不确定发生了什么:S

非常感谢任何提示!

1 个答案:

答案 0 :(得分:0)

您的服务类不在世界范围内,因此RSpec :: Matchers不在那里。

您有两种可能性:

  1. 手动将RSpec :: Matchers包含在此类中。
  2. 将此课程(或模块)放入World。之后,其方法将在步骤定义中直接提供。
  3. 写:

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

    module Helpers
      def method
        # Capybara and RSpec::Matchers are available here
      end
     end
    World(Helpers)