Наконец-то все заработало! Мне пришлось зайти в мой файл 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. Мораль истории: не игнорируйте эти предупреждения.
Теперь вы можете попробовать ${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} поддерживает только незнание значений текстовых узлов и атрибутов, как видно из модульных тестов .
Я завершил реализацию 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) {
}
}
Я бы использовал XSLT и преобразование идентичности , чтобы отфильтровать элементы, которые я хочу игнорировать, и сравнить результаты.
См. XSL: как скопировать дерево, но удаление некоторых узлов? ранее на SO.