我正在使用Ruby Cucumber来测试一个应用程序。我的一个步骤定义是这样做的:
Then(/^all of my (\.\S+) should not have the below fields:$/) do |path,table|
#path is my api, table is the fields list I'm sending through cucumber feature file and @result is the json resonse
expect(JsonPath.on(@result.body,path).flatten.map(&:keys).flatten.uniq & table.raw.flatten).to be_empty
end令人惊讶的是,这已经开始引发一个错误
The expect syntax does not support operator matchers, so you must pass a matcher to `#to`. (ArgumentError)在我新开的git分店里。即使是现在,主分支也不会为这行代码引发任何错误。
我尝试在new分支中搜索与此相关的任何代码差异,但什么也找不到,甚至gem版本中也没有任何变化。
以下是我尝试过的一些方法:
puts JsonPath.on(@result.body,path).flatten.map(&:keys).flatten.uniq & table.raw.flatten
#[]
var = JsonPath.on(@result.body,path).flatten.map(&:keys).flatten.uniq & table.raw.flatten
puts var.class
#Array因此,我的&操作产生了一个空数组,即[],我在该数组上应用了rspec匹配器.to be_empty。具有来自JSON的相同值的相同代码在一个分支中工作,而在另一个分支中不起作用。这不是与机器相关的错误,因为不同机器上的相同分支会引发此错误。
我甚至在这个新分支上更新了我的RSpec gem版本,并尝试了一下,但错误仍然存在。我无法确定此失败的根本原因。帮助!
发布于 2016-09-11 00:28:24
我尝试在新分支中搜索与此相关的任何代码差异,但什么也没有找到,甚至在gem版本中也找不到任何变化。
如果当你在不同的计算机上使用相同的gem版本来回切换时,它是有效的,那么这个差异中的某些东西就是导致问题的原因,无论你认为这种可能性有多不可能。
开始筛选diff,如果提交次数较多,则使用git bisect,或者有选择地将损坏的diff应用于正在运行的diff,直到找到损坏的代码。
作为一个随机猜测:你是在定义一个empty方法吗?
https://stackoverflow.com/questions/39350512
复制相似问题