С FluentValidation как я могу протестировать использование validationContext внутри контроллера?C#

Место общения программистов C#
Ответить
Anonymous
 С FluentValidation как я могу протестировать использование validationContext внутри контроллера?

Сообщение Anonymous »

У меня настроен валидатор, который должен использовать значения за пределами проверяемой модели представления. Поэтому для этого я использую ValidationContext и назначаю RootContextData, а затем вызываю метод проверки внутри контроллера. Если он возвращает ошибку, я добавляю ее в состояние модели. Все работает нормально, но я не могу понять, как это проверить, или, может быть, это указывает на то, что я сделал это не лучшим образом.
Например. валидатор:

Код: Выделить всё

RuleFor(x => x.StartDate.Date.Day)
.Custom((day, context) =>
{
if (!context.RootContextData.TryGetValue("TargetDate", out var targetDate)) return;

var dateVm = context.InstanceToValidate;
if (DatesHelper.SourceDateStringIsGreaterThanTargetDateString(
dateVm.StartDate.DateInputAsString(),
targetDate as string) == true)
{
context.AddFailure("The Start date must be on or before the target date for the action");
}
});
А потом в контроллере..

Код: Выделить всё

. . .

var repositoryResult = customerRepo.Result;
if (!ModelState.IsValid)
{
return View(vm);
}
var validationContext = new ValidationContext(vm)
{
RootContextData =
{
["TargetDate"] = repositoryResult.Dates.Target
}
};
var validator = new StartDateValidator();
var validationResult = await validator.ValidateAsync(validationContext);
if (!validationResult.IsValid)
{
ModelState.AddModelError("StartDate.Date.Day", validationResult.Errors.First().ErrorMessage);
return View(vm);
}

. . .
Очевидно, я мог бы просто передать модель представления с неправильными датами, которая будет отмечать это, но тогда создается ощущение, что я тестирую валидатор внутри контроллера. Что я действительно хочу сделать (я думаю) состоит в том, чтобы передать модель представления с произвольными датами, заставить валидатор выйти из строя по этому правилу, а затем утверждать, что ошибка была добавлена ​​в состояние модели. Любая помощь приветствуется.

Подробнее здесь: https://stackoverflow.com/questions/700 ... controller
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»