Вернуть модель просмотра в модульном тесте - PullRequest
1 голос
/ 28 марта 2019

Я использую xUnit и .NET Core 2.0. Я хотел бы вернуть модель представления, против которой он будет утвержден в моем модульном тесте.

Примером может быть:

Project p1 = GetViewModel<Project>(controller.Edit(1));

с

private T GetViewModel<T>(IActionResult result) where T : class
{
    return (result as ViewResult)?.ViewData.Model as T;
}

Когда я использую ViewResult методы действия, это работает. Однако я не знаю, как использовать его для IActionResult методов действия, подобных тем, которые используются асинхронно при использовании UserManager объектов.

Например:

//This line causes a threading error (Cannot convert from Task<IActionResult> to IActionResult)
ProjectsListViewModel viewModel = GetViewModel<ProjectsListViewModel>(controller.List(2));
//unlike ViewModel, IActionResult does not have a ViewData property so this throws an error
ProjectsListViewModel result = controller.List(2).ViewData.Model as ProjectsListViewModel;

Мой метод действия:

[Authorize]
public async Task<IActionResult> List(int page = 1)
{
    var user = await userManager.FindByNameAsync(User.Identity.Name);
    if(user != null)
    {
        IQueryable<Project> projectList = GetUserProjects(page, user);
        var model = GetProjectsListViewModel(projectList, page, user);
        return View(model);
    }
    TempData["message"] = "User not found";
    return RedirectToAction("Index", "Home");
}

1 Ответ

1 голос
/ 28 марта 2019

Необходимо получить задачи, чтобы получить доступ к результату действия.

ProjectsListViewModel result = GetViewModel<ProjectsListViewModel>(await controller.List(2));

Метод испытания также должен быть асинхронным

public async Task Should_Return_ProjectsListViewModel() {
    //Arrange

    //...

    //Act
    IActionResult actual = await controller.List(2);

    //Assert
    ViewResult viewResult = actual as ViewResult;
    viewResult.Should().NotBeNull(); //FluentAssertions

    ProjectsListViewModel result = viewResult.ViewData.Model as ProjectsListViewModel;
    result.Should().NotBeNull();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...