如何在JavaScript中正确使用karate.match判断数组包含指定值?
问题:在JavaScript中使用karate.match判断数组是否包含指定值的正确方式
问题场景
Scenario: check if the array contains a string * def condition = """ function(){ var myFile = "computer3.jpg" var getAttachment = ["computer3.jpg"] var isFound = karate.match(getAttachment + " contains " + myFile) karate.log("is Found", isFound) return isFound.pass } """ * def r = call condition
报错信息
ReferenceError: "computer3" is not defined
错误原因
原代码中getAttachment + " contains " + myFile会将数组["computer3.jpg"]隐式转换为字符串"computer3.jpg",拼接后得到字符串"computer3.jpg contains computer3.jpg"。当karate.match接收这个字符串作为参数时,会尝试将其当作表达式解析,此时它会把computer3识别为未定义的变量,从而抛出引用错误。
正确实现方式
方式一:使用karate.match的表达式语法(推荐)
利用Karate的表达式占位符,直接传入正确的匹配规则,避免字符串拼接导致的解析问题:
function(){ var myFile = "computer3.jpg" var getAttachment = ["computer3.jpg"] // 使用#()占位符引用变量,用引号包裹字符串防止被解析为变量 var isFound = karate.match('#(getAttachment) contains "#(myFile)"') karate.log("is Found", isFound) return isFound.pass }
方式二:结合JavaScript数组方法判断
先通过JavaScript原生的数组方法判断是否包含目标值,再用karate.match验证结果:
function(){ var myFile = "computer3.jpg" var getAttachment = ["computer3.jpg"] // 用indexOf判断数组是否包含目标值 var isPresent = getAttachment.indexOf(myFile) !== -1 // 匹配结果是否为true var isFound = karate.match(isPresent, true) karate.log("is Found", isFound) return isFound.pass }
内容的提问来源于stack exchange,提问作者Rachid G
相关产品推荐
相关产品推荐

