Ruby on rails rspec have_xml失败,但错误消息显示存在元素
我有点麻烦-不明白为什么我的rspec测试开始失败,并且找不到xml。它是使用。有人能帮我解决这个问题吗?Ruby on rails rspec have_xml失败,但错误消息显示存在元素,ruby-on-rails,ruby,xml,xpath,rspec,Ruby On Rails,Ruby,Xml,Xpath,Rspec,我有点麻烦-不明白为什么我的rspec测试开始失败,并且找不到xml。它是使用。有人能帮我解决这个问题吗? Rspec测试: response.status.should == 200 response.body.should have_xml('/PhoneBook/PhoneBookEntries/Contact/Id', @new_contact.id.to_s) 和控制台的输出: Failure/Error: response.body.should have_xml('/Pho
Rspec测试:
response.status.should == 200
response.body.should have_xml('/PhoneBook/PhoneBookEntries/Contact/Id', @new_contact.id.to_s)
和控制台的输出:
Failure/Error: response.body.should have_xml('/PhoneBook/PhoneBookEntries/Contact/Id', @new_contact.id.to_s)
expected to find xml tag /PhoneBook/PhoneBookEntries/Contact/Id in:
<PhoneBook>
<APIVersion>1.0</APIVersion>
<SyncTime>1377192796</SyncTime>
<PhoneBookEntries>
<Contact>
<Id>182</Id>
<Avatar>
<type>PNG</type>
<data>iVBORw0KGgoAAAANSUhEUgAAAKAAAACgAQAAAACjtFqAAAAABGdBTUEAALGP
C/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUw
AADqYAAAOpgAABdwnLpRPAAAAAJiS0dEAAHdihOkAAAACXBIWXMAAABIAAAA
SABGyWs+AAAAIklEQVRIx+3IMQEAAAwCIPuX1gJrMDhJD5FSSimllFLKfznP
BnQ17b9ZHAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxMy0wOC0yMlQyMDozMzox
NiswMzowMDdI2UsAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTMtMDgtMjJUMjA6
MzM6MTYrMDM6MDBGFWH3AAAAAElFTkSuQmCC
</data>
<Modified>1377192796</Modified>
</Avatar>
</Contact>
<Contact>
<Id>183</Id>
<Avatar>
<type>PNG</type>
<data>iVBORw0KGgoAAAANSUhEUgAAAKAAAACgAQAAAACjtFqAAAAABGdBTUEAALGP
C/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUw
AADqYAAAOpgAABdwnLpRPAAAAAJiS0dEAAHdihOkAAAACXBIWXMAAABIAAAA
SABGyWs+AAAAIklEQVRIx+3IMQEAAAwCIPuX1gJrMDhJD5FSSimllFLKfznP
BnQ17b9ZHAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxMy0wOC0yMlQyMDozMzox
NiswMzowMDdI2UsAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTMtMDgtMjJUMjA6
MzM6MTYrMDM6MDBGFWH3AAAAAElFTkSuQmCC
</data>
<Modified>1345656796</Modified>
</Avatar>
</Contact>
</PhoneBookEntries>
</PhoneBook>
Failure/Error:response.body.should_xml('/PhoneBook/PhoneBookEntries/Contact/Id',@new_Contact.Id.to_s)
应在以下位置找到xml标记/PhoneBook/PhoneBookEntries/Contact/Id:
1
1377192796
182
巴布亚新几内亚
IVBORW0KGGOAAAANSUHEUGAAACQAAACJTFQAAABGDBTUEAALGP
C/XHBQAAFZUKDCAK7OHOKAAAGY0HSTQAAEIYAAICAAD6AAAGOGAHUW
AADQYAAAOPGAABDWNLPPAAAJAJIS0DEADHIHOKAAAACXBIWXMAABIAAAA
SABGyWs+AAAAIklEQVRIx+3IMQEAAWCIPUX1GJRMDHJD5FSSIMLLFLKFZNP
BNQ17B9ZHAAACV0RVH0ZGF0ZTPJCMVHDGUAMJAXMY0WOC0YMLQYMDOZOX
Niswmzowmddi2USAAALDEVEYDGRHDGU6BW9KAWZ5ADIWMTMDGTMJJJUMJA6
MZM6MTRMDM6MDBGFW3AAAAELFTKSUQMCC
1377192796
183
巴布亚新几内亚
IVBORW0KGGOAAAANSUHEUGAAACQAAACJTFQAAABGDBTUEAALGP
C/XHBQAAFZUKDCAK7OHOKAAAGY0HSTQAAEIYAAICAAD6AAAGOGAHUW
AADQYAAAOPGAABDWNLPPAAAJAJIS0DEADHIHOKAAAACXBIWXMAABIAAAA
SABGyWs+AAAAIklEQVRIx+3IMQEAAWCIPUX1GJRMDHJD5FSSIMLLFLKFZNP
BNQ17B9ZHAAACV0RVH0ZGF0ZTPJCMVHDGUAMJAXMY0WOC0YMLQYMDOZOX
Niswmzowmddi2USAAALDEVEYDGRHDGU6BW9KAWZ5ADIWMTMDGTMJJJUMJA6
MZM6MTRMDM6MDBGFW3AAAAELFTKSUQMCC
1345656796
为其链接代码的匹配器无法处理具有不同文本值的两个匹配节点。或者,更准确地说,如果给它一个选择两个或多个具有不同文本的节点的xpath,它将始终无法匹配
您的XML有两个匹配的xpath节点/PhoneBook/PhoneBookEntries/Contact/Id
,这些匹配不会同时包含包含相同字符串Id的文本。这就是匹配失败的原因
在不修复匹配器的情况下,最简单的方法可能是在xpath中只选择一个要匹配的节点,并在不提供第二个文本参数时依赖该行为
response.body.should have_xml(
"/PhoneBook/PhoneBookEntries/Contact[Id='#{@new_contact.id}']" )
这会将匹配到Id的内容移动到xpath查询本身中,因此获取匹配节点意味着您已经发现要断言的Id已经添加。xpath选择匹配的Contact
节点,而不是Id
节点,这对于进一步的断言可能很有用