Как отправить POST на контроллер при интеграционном тестированииC#

Место общения программистов C#
Ответить
Anonymous
 Как отправить POST на контроллер при интеграционном тестировании

Сообщение Anonymous »


Я пишу интеграционные тесты для приложения ASP.NET Core MVC, используя WebApplicationFactory, который предоставляет HttpClient для выполнения вызовов контроллеров.

Я пытаюсь протестировать метод обновления на контроллере. Метод обновления в контроллере принимает ViewModel в качестве параметра. Когда я вызываю метод HttpClient PostAsync, вызывается метод контроллера, но полученная им ViewModel не содержит данных, которые я ему передал. Что я делаю не так?

[Факт] общедоступная асинхронная задача UpdateTestAsync() { var newNotes = "Эти заметки теперь изменены"; вар dto = новый TestVm { Действие = «Обновить», Идентификатор = 2, CreatedBy = "Какой-то парень", CreatedDate = новая дата и время (2023, 08, 02, 14, 30, 05), Закрыто = ложь, Примечания = новыеПримечания }; вар клиент =ockWebApp.GetClient(); вар содержимое = JsonContent.Create(dto); var ответ = ждут client.PostAsync("/Tests/Update", content); вар responseStr = ожидайте ответа.Content.ReadAsStringAsync(); var res = JsonSerializer.Deserialize(responseStr); вар контекст =ockWebApp.Context?.Referral; var Referral = context?.FirstOrDefault(f => f.Id == 2); ответ.EnsureSuccessStatusCode(); res.ShouldNotBeNull(); res.Error.ShouldBeFalse(); реферал.ShouldNotBeNull(); Referral.Notes.ShouldBe(newNotes); } Вот контроллер, который не получает данные модели представления, отправленные из метода интеграционного тестирования:

public async Task UpdateAsync (TestVm vm) { var dto = Mapper.Map(vm); вар res = ждут mediator.Send (новый UpdateTestCommand {Dto = dto}); если (рез!= ноль && !res.Ошибка && dto.Action == FormSaveActions.SaveAndExit) { res.RedirectControllerRoute = "Тесты"; res.RedirectActionRoute = "Индекс"; } вернуть Json (рез); } Примечание: когда я вызываю метод контроллера напрямую вместо использования HttpClient, он работает нормально:
var контроллер = новый TestsController( ockWebApp.ServiceProvider.GetRequiredService(), ockWebApp.ServiceProvider.GetRequiredService()); результат вар = ждут контроллера.UpdateAsync(vm);
Ответить

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

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

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

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

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