В настоящее время Cypress cy.route
может блокировать только сетевые запросы, использующие XHRs
Собственные элементы формы HTML не используют XMLHTTPRequest , поэтому вы не можете используйте cy.route
, чтобы заглушить его.
Большинство людей не сталкиваются с этой проблемой, потому что использование нативных форм HTML не так распространено в наши дни
Вы также waiting
на маршрут, но на самом деле ничего не сделал в вашем тесте. Ваш тест должен выглядеть примерно так:
cy.route('GET',
'**/getIncentives*',
{info: {}, results: {}}
).as('oppty');
// cypress code that would cause a network request.
cy.wait('@oppty');
Библиотека Dynamic LINQ является прекрасным выбором, поскольку она генерирует выражения, которые можно скомпилировать для кодирования легким способом.
Пример, который Вы обеспечили на самом деле, производит булевскую переменную - таким образом, необходимо смочь попросить Func, и он мог бы уладить его.
Править: Это, конечно, неправильно, поскольку Выражения не имеют присвоения в них вообще.
Так, другой потенциальный путь состоит в том, чтобы взять две лямбды. Один для нахождения свойства Вы хотите, один для обеспечения значения:
(=> a. AccountId), (=> верный)
Затем используйте отражение для установки свойства, на которое ссылаются в первой лямбде с результатом второго. Hackish, но это все еще, вероятно, легко по сравнению с вызовом компилятора C#.
Таким образом, Вы не должны делать большого количества codegen сами - выражения, которые Вы получаете, будет содержать больше всего все, в чем Вы нуждаетесь.
Нет никакого общего способа проанализировать строку в лямбда-выражение без полной компиляции, потому что лямбда-выражения могут сослаться на вещи, которые определяются вне лямбда-выражения. Я не знаю ни о какой библиотеке, которая обрабатывает конкретный случай, который Вы хотите. Существует долгое обсуждение этого на потоке на дискуссионной группе C#.
Самый легкий способ добраться, что Вы хотите, состоит в том, чтобы скомпилировать метод во времени выполнения. Можно записать функцию, которая берет в строке "a. Включенный = верный; возвратите a"; и палки, что посреди функции, которая уделяет Внимание в качестве параметра. Я пользовался бы этой библиотекой как начальной точкой, но можно также использовать функцию, упомянутую на другом потоке.
Это просто:
По сути, вам нужно создать следующий класс с помощью CodeDom:
using System;
using MyNamespace1;
using ...
using MyNamespace[N];
namespace MyNamespace.GeneratedTypes
{
public class ExpressionContainer[M] : IHasAccountAction
{
public Action<Account> AccountAction {
get {
return [CodeSnippedExpression must be used here];
}
}
}
}
Предполагая, что IHasAccountAction
равно:
public IHasAccountAction {
public Action<Account> AccountAction { get; }
}
Если это сделано, вы можете легко скомпилировать выражение из строки. Если вам нужно его представление в виде дерева выражений, используйте Expression
вместо Action
в сгенерированном типе.
Вы можете попробовать следующее: Динамические лямбда-выражения с использованием изолированного домена приложения
Он компилирует лямбда-выражение с помощью компилятора CodeDOM. Чтобы избавиться от созданной сборки в памяти, компилятор запускается в изолированном AppDomain
. Для передачи выражения через границу домена его необходимо сериализовать. Увы, Expression <>
не Serializable
. Итак, нужно использовать хитрость. Все подробности описаны в сообщении.
Кстати, я автор этого компонента. Я очень хотел бы услышать ваши отзывы об этом.