Почему вы не используете типы?
Почему у вас есть [disabled]="irule.type[i]
, но тип это строка, и в вашей инициализации у вас есть пустое значение, поэтому следует вернуть OutOfRangeException
в JavaScript
Почему вы не удалили ngModel
из ngForm
? например :
@ViewChild(NgForm) form : NgForm;
removeExample(index: number){
let currentControlName: string = `iruleValue${i}`
let control:NgModel = this.form.controls[currentControlName];
control && this.form.removeControl(control)
this.campaign.includeRules.splice(i, 1)
this.changeDetectorRef.detectChanges()
}
Это действительно зависит от того, что Вы хотите проверить как "различия".
Прямо сейчас мы используем Microsoft XmlDiff: http://msdn.microsoft.com/en-us/library/aa302294.aspx
Выполнение простой строки выдерживает сравнение на a xml
строка не всегда работает. Почему?
например, оба:
<MyElement></MyElmennt>
и <MyElment/>
равны от xml
точка зрения..
Существуют алгоритмы для преобразования создания xml
всегда выглядите одинаково, их называют алгоритмами канонизации. .Net
имеет поддержку канонизации.
Из-за содержания XML-файла другое форматирование может иметь и все еще считаться тем же (с точки зрения DOM) при тестировании равенства, необходимо ли определить, какова мера того равенства, например, форматирование проигнорировано? делает метаданные, проигнорированы, и т.д. располагает важный, много пограничных случаев.
Обычно Вы создавали бы класс, который определяет Ваши правила равенства, и используйте его для своих сравнений, и если Ваш класс сравнения реализует IEqualityComparer and/or IEqualityComparer<T>
интерфейсы, затем Ваш класс может использоваться в наборе встроенных списков платформы как тестовая реализация равенства также. Плюс, конечно, у Вас может быть столько, сколько необходимо измерить равенство по-другому, поскольку требования требуют.
т.е.
IEnumerable<T>.Contains
IEnumerable<T>.Equals
The constructior of a Dictionary etc etc
Я закончил тем, что получил результат, который я хотел со следующим кодом:
private static void ValidateResult(string validationXml, XPathNodeIterator iterator, params string[] excludedElements)
{
while (iterator.MoveNext())
{
if (!((IList<string>)excludedElements).Contains(iterator.Current.Name))
{
Assert.IsTrue(validationXml.Contains(iterator.Current.Value), "{0} is not the right value for {1}.", iterator.Current.Value, iterator.Current.Name);
}
}
}
Прежде, чем назвать метод, я создаю навигатора на экземпляре XmlDocument этот путь:
XPathNavigator nav = xdoc.CreateNavigator();
Затем, я создаю экземпляр XPathExpression, как так:
XPathExpression expression = XPathExpression.Compile("/blah/*");
Я называю метод после создания итератора с выражением:
XPathNodeIterator iterator = nav.Select(expression);
Я все еще выясняю, как оптимизировать его далее, но это добивается цели на данный момент.
Вы могли бы найти, что это менее хрупко, чтобы проанализировать XML в XmlDocument и основывать Ваш Утверждать запросы к Запросу XPath. Вот некоторые методы утверждения помощника, которые я часто использую. Каждый берет XPathNavigator, который можно получить путем называния CreateNavigator () на XmlDocument или на любом узле полученным из документа. Пример использования был бы:
XmlDocument doc = new XmlDocument( "Testdoc.xml" );
XPathNavigator nav = doc.CreateNavigator();
AssertNodeValue( nav, "/root/foo", "foo_val" );
AssertNodeCount( nav, "/root/bar", 6 )
private static void AssertNodeValue(XPathNavigator nav,
string xpath, string expected_val)
{
XPathNavigator node = nav.SelectSingleNode(xpath, nav);
Assert.IsNotNull(node, "Node '{0}' not found", xpath);
Assert.AreEqual( expected_val, node.Value );
}
private static void AssertNodeExists(XPathNavigator nav,
string xpath)
{
XPathNavigator node = nav.SelectSingleNode(xpath, nav);
Assert.IsNotNull(node, "Node '{0}' not found", xpath);
}
private static void AssertNodeDoesNotExist(XPathNavigator nav,
string xpath)
{
XPathNavigator node = nav.SelectSingleNode(xpath, nav);
Assert.IsNull(node, "Node '{0}' found when it should not exist", xpath);
}
private static void AssertNodeCount(XPathNavigator nav, string xpath, int count)
{
XPathNodeIterator nodes = nav.Select( xpath, nav );
Assert.That( nodes.Count, Is.EqualTo( count ) );
}