模拟xunit测试IJSRuntime [英] mock xunit testing IJSRuntime
本文介绍了模拟xunit测试IJSRuntime的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在我的Blazor应用程序中,我正在尝试测试删除代码,当单击该按钮时,它将运行以下代码以显示确认对话框:
public async Task DeleteDocument(DocumentViewModel document)
{
bool confirmed = await JsRuntime.InvokeAsync<bool>("confirm", "Are you sure?");
if (confirmed)
{
... do some delete code here
}
在我的测试项目中,我有这样一行:
_mockJsRuntime
.Setup(js => js.InvokeAsync<bool>(It.IsAny<string>(), It.IsAny<object>()))
.Returns(ValueTask.FromResult(true));
当我运行测试时,我收到以下错误:
不能在安装/验证表达式中使用扩展方法(此处为:JSRunimeExtensions.InvokeAsync)。
如何才能测试我的DeleteDocument方法?
推荐答案
若要能够模拟方法返回,模拟类型必须是接口,或者该方法必须标记为抽象或虚拟。
在您的示例中,您不能模拟扩展方法,因为它不是虚拟方法。通常,扩展方法最终会调用接口中声明的方法,在这种情况下,您可以很容易地查看源代码here。
这样您就可以更改安装程序,使其与IJSRuntime接口中声明的方法签名匹配。
_mockJsRuntime
.Setup(js => js.InvokeAsync<bool>(It.IsAny<string>(), It.IsAny<object[]>()))
.Returns(ValueTask.FromResult(true));
这篇关于模拟xunit测试IJSRuntime的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文