我有一个功能,我们称它为F1,该功能返回一个流,并且与两个流相同的文件:
* def aPdf1 = read('classpath:pdf.pdf')
* def aPdf2 = read('classpath:pdf.pdf')
* def out = { one: aPdf1, two: aPdf2 }
当我从另一个功能调用F1时,例如说F2,并比较流,它们不匹配:
* def out = call read('F1.feature')
* match out.aPdf1 == out.aPdf2
,错误是:
com.intuit.karate.exception.KarateException:意外类型:类java.io.BufferedInputStream
这是一个错误吗?还是尚未实现的功能?
PS1:如果我将以下行添加到F1中,它将自动成功完成:
* match aPdf1 == aPdf2
PS2:利用答案中的代码this question,我能够匹配F2中的流。
答案 0 :(得分:1)
问题是您创建了一个无效的JSON,恰好以二进制流作为值。只需坚持将流与流进行比较-就像您已经看到的那样,它将起作用。如果需要将PDF转换为字符串,可以执行以下操作:
<link href="https://cdnjs.cloudflare.com/ajax/libs/fullPage.js/3.0.3/fullpage.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/fullPage.js/3.0.3/fullpage.min.js"></script>
<div class="wrapper">
<div id="fullpage">
<div class="section" id="section1">
<div class="slide">
<h1>Simple Demo</h1>
</div>
<div class="slide">
<h1>Only text</h1>
</div>
<div class="slide">
<h1>And text</h1>
</div>
<div class="slide">
<h1>And more text</h1>
</div>
</div>
<div class="section" id="section2">
<h1>No wraps, no extra markup</h1>
</div>
<div class="section" id="section3">
<h1>Just the simplest demo ever</h1>
</div>
<div class="section" id="section4">
<h1>Lorem Ipsum</h1>
</div>
<div class="section" id="section5">
<h1>Lorem Ipsum</h1>
</div>
</div>
</div>
此外,您可能已经错过了嵌入式表达式和“封闭式javascript”之间的区别。您是要这样做吗?
* string aPdf2 = read('classpath:pdf.pdf')
或:
* def out = ({ one: aPdf1, two: aPdf2 })
有关JSON和二进制值的更多上下文,请参考以下答案:https://stackoverflow.com/a/52541026/143475
编辑:因此,如果要比较两个流,则必须先将它们转换为字节数组。尝试一下,您可以为流到字节转换器创建自己的实现:
* def out = { one: '#(aPdf1)', two: '#(aPdf2)' }