我试图从Controller获取结果,该结果调用Repository,最后提取ViewModel,这是用于单元测试。下面的粗体不起作用。
编译错误:
IAction Result不包含View的定义,也没有扩展方法View接受IAction类型的第一个参数结果
Query: {
groupMenuStatus: async (_, args, { cache }) => {
const query = gql`
query groupMenuStatus {
groupMenuStatus @client {
isOpen
}
}
`;
const res = cache.readQuery({ query });
return res.groupMenuStatus;
},
},
public async Task<IActionResult> Search(int? id)
{
return View(await _repository.GetProductData(id));
}
var searchresult1 = await _controller.Search(5);
答案 0 :(得分:1)
尝试这样的事情
var searchresult1 = await _controller.Search(5) as ViewResult;
var result = searchResult.ViewName; // this should be the value returned from the controller
或者您可以将结果作为ViewData.Model
返回。因此,在您的控制器中,您可以执行类似
return View("Product", await _repository.GetProductData(id));
然后在测试中,您可以访问viewdata.model,如
var result = await _controller.Search(5);
var productData = (ProductData) result.ViewData.Model; // cast it to whatever class the GetProductData(5) returns
选项1在运行时工作,因为视图名称由框架使用路径数据设置。在单元测试期间不可用。这就是在第二个示例中手动设置视图名称的原因
请参阅有关MVC view model
的更多详情