Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby NoMethodError:试图在SitePrism类中使用未定义的方法“expect”_Ruby_Cucumber_Capybara_Site Prism - Fatal编程技术网

Ruby NoMethodError:试图在SitePrism类中使用未定义的方法“expect”

Ruby NoMethodError:试图在SitePrism类中使用未定义的方法“expect”,ruby,cucumber,capybara,site-prism,Ruby,Cucumber,Capybara,Site Prism,我有一个cucumber、ruby和siteprism项目,我们使用“rspec”gem来检查期望值。这包含在我们的env.rb中,并在步骤定义中成功使用 我现在试图在SitePrism类中做出一些断言,但我得到了一个错误。你知道我怎么用这些方法吗? 我尝试在定义SitePrism类的.rb文件中使用require'rspec'plus include rspec,但仍然出现了相同的错误: expect(local_value).to eq(@previous_value) => Erro

我有一个cucumber、ruby和siteprism项目,我们使用“rspec”gem来检查期望值。这包含在我们的env.rb中,并在步骤定义中成功使用

我现在试图在SitePrism类中做出一些断言,但我得到了一个错误。你知道我怎么用这些方法吗? 我尝试在定义SitePrism类的.rb文件中使用require'rspec'plus include rspec,但仍然出现了相同的错误:

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

谢谢大家!

正如您在评论中所发现的,您可以在页面对象类中包含RSpec::Matchers,以便与RSpec默认匹配器一起使用。其中一个匹配器名为all,它会对之前包含在对象中的Capybara::DSL all方法进行阴影处理,并产生您看到的错误。解决这个问题的方法是在当前会话对象页面上调用Capybara版本的all或别名“find\u all”。所以所有的…地图。。。变成

老问题,但提供答案

同样值得指出的是,在遵循自述说明时。Cucumber将在Cucumber world中加载RSpec测试功能

取决于你在哪里和谁说话;可以说,最好是在Cumber World内(即在step_定义中)对您的特性执行所有基于RSpec的测试

此外,这样做可以避免您需要在任何地方包含这些项目,并且您将获得干净的步骤,例如expectmy_page.header_message.text.to eq'this'


您还可以使用任何其他方法,包括自动创建的capybara方法,这些方法将使用隐式等待或rspec自动包含方法,这些方法是从类中的方法创建的

I include rspec::Matchers在类中,并且似乎传递了预期错误消息。然而,我接着得到了另一个相关的问题,有没有关于修复这个错误的建议,或者以不同的方式包含expect?NoMethodError:你是指未定义的“map”方法吗?Tap这与您帮助我回答的关于SitePrism的另一个问题有关。我只是调用了siteprism方法,而没有亲自调用Capybara。你知道可以用另一种方式绕过这个问题吗?@Mickeel all不是site_prism方法,它是site_prism包含在页面对象类中的一种水豚方法。如果你说你的代码不是在调用site_prism中的某个地方,那么你需要使用site_prism的主分支运行。去年年底,有一个补丁合并了它——我明白了,是的,它似乎在处理分区时调用了site_prism。还有一个基本的疑问。我已经安装了gem版本2.9,并且查看了rubygems.org,这似乎是最新版本。如果我的版本还没有正式发布,你有没有关于如何升级到master branch的链接?我想,我可以在本地覆盖一些文件,但团队中的其他人也使用该框架?在gemfile而不是2.9版中,您可以指定gem“site_prism”,吉特:'https://github.com/natritmeyer/site_prism.git'要告诉它使用github repo中的主分支,如果您需要除主分支以外的分支,您也可以传递一个:分支选项。。。它似乎不起作用:*从at使用site_prism 2.9master@307d19e*然后我在我的SitePrism页面中的一个方法中使用了以下期望:expectpostcode.to eqE1*并得到了相同的错误:NoMethodError:undefined method`map',因为我做错了什么,你可以从你的角度看出来吗?
page.all(...).map(...) # Same as Capybara.current_session.all(...)...
find_all(...).map(...)  # or page.find_all ...