匹配流

时间:2018-10-29 15:10:50

标签: stream match karate

我有一个功能,我们称它为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中的流。

1 个答案:

答案 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)' }