@mystackrunnethover отчасти правильно, не обязательно получать покрытие этой линии, но на всякий случай:
Я использую эти тесты как «тесты на разумность», чтобы также убедиться, что Jest даже работает.
Распространенной ошибкой является предположение, что imported_thing.toBeTruth()
потерпит неудачу, если импорт не сработал. Это не будет - imported_thing
будет пустым объектом, что является правдой.
Вот что мы используем:
import Account from '/account';
//describe block
expect(Account).toBeTruthy();
expect(Object.keys(Account).length > 0).toBe(true);
Это, конечно, работает, только если то, что Account
действительно имеет свойства (и должно быть). Другой метод заключается в том, чтобы специально проверить свойства, которые вы ожидаете.
Следующее преобразование приводит к необходимому результату:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="vN" select="3"/>
<xsl:template match="/*">
<xsl:copy>
<xsl:apply-templates
select="line[position() mod $vN = 1]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="line">
<set>
<xsl:apply-templates mode="copy" select=
".
|
following-sibling::line[position() < $vN]"/>
</set>
</xsl:template>
<xsl:template match="line" mode="copy">
<xsl:copy-of select="."/>
</xsl:template>
</xsl:stylesheet>
При применении на предоставленный XML-документ:
<Header>
<line>Line 1</line>
<line>Line 2</line>
<line>Line 3</line>
<line>Line 4</line>
<line>Line 5</line>
<line>Line 6</line>
<line>Line 7</line>
<line>Line 8</line>
<line>Line 9</line>
</Header>
результат:
<Header>
<set>
<line>Line 1</line>
<line>Line 2</line>
<line>Line 3</line>
</set>
<set>
<line>Line 4</line>
<line>Line 5</line>
<line>Line 6</line>
</set>
<set>
<line>Line 7</line>
<line>Line 8</line>
<line>Line 9</line>
</set>
</Header>
Действительно отметьте следующее:
Использование XPath mod
оператор для обнаружения первого line
элемент в каждой группе vN
элементы.
Использование режимов, чтобы смочь обработать отличающийся line
элементы различными шаблонами
В целом в XSLT, если Вы хотите создать иерархию из списка, можно использовать ключевые слова предыдущего одноуровневого элемента и следовать-одноуровневого-элемента. Это - easist, если существует запись маркера между наборами.
Поскольку у Вас нет маркера как такового в этом случае, я предполагаю, что решение могло включить ключевое слово следовать-одноуровневого-элемента и оператор Mod. Модификация, обеспечивающая подразделению между наборами.
Я не попробовал его, но это было бы моим первым запуском.
xslt обычно является хорошим местом для запуска с понимания различных ключевых слов.
http://www.xml.com/pub/a/2003/11/05/tr.html показывает немного менее ужасный способ сделать этот XSLT 2.0 использования. Основной элемент - этот:
<xsl:for-each-group select="*" group-ending-with="*[position() mod 3 = 0]">
Это должно быть возможно. Имеет желаемый вывод:
<?xml version='1.0' encoding='UTF-8'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="/Header">
<Header>
<xsl:for-each select="line">
<xsl:if test="not(number()=0) and position() mod 3 = 0">
<set>
<xsl:variable name="pos" select="position()"/>
<line><xsl:value-of select="../line[position()=($pos -2)]"/></line>
<line><xsl:value-of select="../line[position()=($pos -1)]"/></line>
<line><xsl:value-of select="text()"/></line>
</set>
</xsl:if>
</xsl:for-each>
</Header>
</xsl:template>
</xsl:stylesheet>
($pos-1, вещь $pos-2 не очень симпатична),