Я использую 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");
}