跟随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>();
}
我仍然有例外
host.AddService(jsRuntimeMock);
将Mock<IJSRuntime>
注册为依赖项。在实现中(测试程序集之外)的任何类都不应具有此类依赖关系,但这是一个常见错误。
将IJSRuntime
注册为对您的Mock属性Object的依赖。
喜欢这个:
host.AddService<IJSRuntime, IJSRuntime>(jsRuntimeMock.Object)
;