我遇到了一些麻烦 - 无法理解为什么我的rspec测试开始失败并且无法找到xml。它是使用this实现的。谁能帮我解决这个问题呢? 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>
答案 0 :(得分:1)
您链接代码的匹配器无法处理具有不同文本值的两个匹配节点。或者,更准确地说,如果您为其指定一个选择两个或更多具有不同文本的节点的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
节点,这可能对于进一步的断言有用。