xspec:预期和结果相同时失败

xspec: failure when expected and result are the same

我使用 xspec 来测试样式表。大多数时候它工作正常,但偶尔测试会在没有正当理由的情况下失败:预期结果和实际结果相同。貌似:比较屏里什么都是绿色的。 在那种情况下,我通常会在尝试各种方法后让它重新工作,但不知道发生了什么变化 'did it'.

如果 xspec 报告失败的原因,那将是最有帮助的,但如果你能帮助我(而不是 xspec 输出)对此有所启发,我将非常高兴。

这是一个简化的测试用例: xsl:

<xsl:stylesheet version="2.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:uc="http://www.infinity-loop.de/namespace/upcast/4.0/"
  xmlns:xlink="http://www.w3.org/1999/xlink" 
  xmlns:html="http://www.w3.org/HTML/1998/html4"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  exclude-result-prefixes="uc xlink html xs xsl">

  <xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>

  <xsl:template match="bezwaar">
    <xsl:variable name="content">
      <xsl:element name="{name()}">
        <xsl:apply-templates select="@*|node()"/>
      </xsl:element>
    </xsl:variable>
    <xsl:copy-of select="$content"/>
  </xsl:template>

  <xsl:template match="@*" >
    <xsl:attribute name="{name()}" namespace="{namespace-uri()}">
      <xsl:value-of select="." />
    </xsl:attribute>
  </xsl:template>

  <xsl:template match="*">
    <xsl:element name="{name()}" namespace="{namespace-uri()}">
      <xsl:apply-templates select="@*|node()" />
    </xsl:element>
  </xsl:template>
</xsl:stylesheet>

xspec:

<?xml version="1.0" encoding="UTF-8"?>
<x:description
    xmlns:x = "http://www.jenitennison.com/xslt/xspec"
    stylesheet="file:/home/rdgon/project/kraak/kraak-xslt/publicatiebladen/staatscourant/stcrt_step2.xsl">
  <x:param name='ns' select="false()"/>

  <x:scenario label='test'>
    <x:scenario label='werkt dit'>
      <x:context><bezwaar>
          <al>Noem in het bezwaarschrift:</al>
          <al nadruk="cur">Vergeet niet te ondertekenen.</al>
        </bezwaar>
      </x:context>
      <x:expect>
        <bezwaar>
          <al>Noem in het bezwaarschrift:</al>
        <al nadruk="cur">Vergeet niet te ondertekenen.</al>
      </bezwaar>
    </x:expect>
    </x:scenario>
  </x:scenario>
</x:description>

测试报告显示失败:

你能解释一下我没看到什么吗?

路德

如果您有 运行 您的 XSL,那么 bezwaar 元素出现 2 次并出现额外的命名空间,因为您有 x:contextx:expect 在同一元素中。如果你想 x:expectx:context 相同,那么你可以试试这个代码。

<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:x = "http://www.jenitennison.com/xslt/xspec"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs x">

<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="x:scenario">
    <xsl:apply-templates select="x:scenario/x:context/bezwaar"/>
</xsl:template>
<xsl:template match="bezwaar">
    <xsl:element name="{local-name()}">
        <xsl:apply-templates select="@*|node()"/>
    </xsl:element>
</xsl:template>
<xsl:template match="al">
    <xsl:element name="{local-name()}">
        <xsl:apply-templates select="@*|node()"/>
    </xsl:element>
</xsl:template>
<xsl:template match="@*">
    <xsl:attribute name="{local-name(.)}">
        <xsl:value-of select="."/>
    </xsl:attribute>
</xsl:template>

如果你想要bezwaar多次那么你可以评论第一个模板匹配。

因为 xsl:variable 没有 @as,您的结果是一个文档节点。但是您的 x:expect 需要一个元素。

如果你想让你的x:expect期待一个文档节点,你需要添加select="/"x:expect。在 XSpec Wiki.

中寻找解释 "If you specify no @select"