Как я игнорирую определенные элементы при сравнении XML?

Наконец-то все заработало! Мне пришлось зайти в мой файл application.js и удалить «/ = require jquery-ujs». Файл уже содержит '/ = require rails-ujs', поэтому jquery-ujs не нужен (и в моем случае полностью мешал моему приложению работать должным образом!).

Мой файл application.js:

    //= require jquery
    //= require rails-ujs
    //= require activestorage
    //= require_tree .

Честно говоря, в консоли я получал предупреждение о том, что мне не нужно запрашивать оба этих параметра. Однако, поскольку я не сталкивался с локальными проблемами, связанными с JS / jQuery, я проигнорировал предупреждение. И вот, это было причиной того, что мои файлы JS не загрузились должным образом на Heroku. Мораль истории: не игнорируйте эти предупреждения.

30
задан Cody Gray 23 August 2017 в 07:13
поделиться

3 ответа

Теперь вы можете попробовать ${xmlunit.ignore} в XMLUnit 2.6.0 (добавить зависимость xmlunit-placeholder). Пример кода приведен ниже.

Diff diff = DiffBuilder
    .compare(expectedXML)
    .withTest(actualXML)
    .withDifferenceEvaluator(new PlaceholderDifferenceEvaluator())
    .build();

Ожидаемый XML:

<root>
  <elementA>${xmlunit.ignore}</elementA>
  <elementB>something else</elementB>
  <elementC>yet another thing</elementC>
</root>

Фактический XML:

<root>
  <elementA>anything</elementA>
  <elementB>something else</elementB>
  <elementC>yet another thing</elementC>
</root>

Обратите внимание, что в настоящее время $ {xmlunit.ignore} поддерживает только незнание значений текстовых узлов и атрибутов, как видно из модульных тестов .

0
ответ дан Zheng Wang 27 November 2019 в 23:44
поделиться

Я завершил реализацию DifferenceListener , который принимает список имен узлов (с пространствами имен), чтобы игнорировать текстовые различия для:

public class IgnoreNamedElementsDifferenceListener implements DifferenceListener {
    private Set<String> blackList = new HashSet<String>();

    public IgnoreNamedElementsDifferenceListener(String ... elementNames) {
        for (String name : elementNames) {
            blackList.add(name);
        }
    }

    public int differenceFound(Difference difference) {
        if (difference.getId() == DifferenceConstants.TEXT_VALUE_ID) {
            if (blackList.contains(difference.getControlNodeDetail().getNode().getParentNode().getNodeName())) {
                return DifferenceListener.RETURN_IGNORE_DIFFERENCE_NODES_IDENTICAL;
            }
        }

        return DifferenceListener.RETURN_ACCEPT_DIFFERENCE;
    }

    public void skippedComparison(Node node, Node node1) {

    }
}
38
ответ дан 27 November 2019 в 23:44
поделиться

Я бы использовал XSLT и преобразование идентичности , чтобы отфильтровать элементы, которые я хочу игнорировать, и сравнить результаты.

См. XSL: как скопировать дерево, но удаление некоторых узлов? ранее на SO.

8
ответ дан 27 November 2019 в 23:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: