模拟Blazor组件单元测试的IJSRuntime

问题描述 投票:0回答:1

跟随this prototype进行单元测试,使用JS互操作时遇到了问题。

[Test]
public void ExampleTest()
{
    var component = host.AddComponent<MyComponent>();
}

仅添加使用IJSRuntime的组件将导致以下异常

System.InvalidOperationException:无法为类型'Application.Components.MyComponent'的属性'JsRuntime'提供值。没有类型为“ Microsoft.JSInterop.IJSRuntime”的注册服务。

JS互操作没有做任何有趣的事情,它只是一个以元素为焦点的void函数-我不在乎对其进行测试,我只希望能够继续为组件本身编写测试。

如何使用Moq模拟IJSRuntime?

[当我尝试类似的东西时

[Test]
public void ExampleTest()
{
    var jsRuntimeMock = new Mock<IJSRuntime>();

    host.AddService(jsRuntimeMock);

    var component = host.AddComponent<MyComponent>();
}

我仍然有例外

unit-testing moq blazor
1个回答
0
投票

host.AddService(jsRuntimeMock);Mock<IJSRuntime>注册为依赖项。在实现中(测试程序集之外)的任何类都不应具有此类依赖关系,但这是一个常见错误。

IJSRuntime注册为对您的Mock属性Object的依赖。

喜欢这个:

host.AddService<IJSRuntime, IJSRuntime>(jsRuntimeMock.Object);

© www.soinside.com 2019 - 2024. All rights reserved.