我尝试在 Blazor 服务器端项目中使用 BUnit 进行组件测试。我对此很陌生,并试图开始一个真正简单的设置:
using var ctx = new TestContext();
ctx.Services.AddTransient<IProposalService, ProposalService>();
var cut = ctx.Render<Proposals>();
现在我无法运行它,因为 Rider 声明:
方法“渲染”有 1 个参数,但使用 0 个参数调用
在此之后,我检查了文档如何为此传递参数。由于我的组件Proposals
中没有任何[parameter]
标签,因此只有两次注入:
[Inject] private IProposalService ProposalService { get; set; }
[Inject] private NavigationManager NavigationManager { get; set; }
所以我虽然可能缺少一些 ChildContent ,因为我使用的ProposalCard
是这样的:
@foreach (var prop in _proposalList)
{
<ProposalCard Proposal="@prop"/>
}
请参阅上面文档链接的最后一节中的在其他组件中渲染被测组件部分。
他们在这里使用以下代码:
public class NestedComponentTest
{
[Fact]
public void Test()
{
using var ctx = new TestContext();
var wrapper = ctx.RenderComponent<Wrapper>(parameters => parameters
.AddChildContent<HelloWorld>()
);
var cut = wrapper.FindComponent<HelloWorld>();
}
}
我试过这样:
var cut = ctx.Render<Proposals>(parameters => parameters.AddChildContent<ProposalCard>());
- 第一次渲染:方法“渲染”有 1 个参数,但 iS 使用 0 个参数调用
- 第二次渲染:无法解析符号“AddChildContent”
- 当我运行第一个渲染时: ProposalTest.cs(35, 35): [CS7036] 没有给出与“TestContext”的所需形式参数“renderFragment”相对应的参数。渲染(RenderFragment)'
- 运行第二个渲染时:ProposalTest.cs (37, 35): [CS1061] 'RenderTreeBuilder' 不包含 'AddChildContent' 的定义,并且没有可访问的扩展方法 'AddChildContent' 接受类型为 'RenderTreeBuilder' 的第一个参数(您是否缺少 using 指令或程序集引用?)
我想也许我必须自己创建 renderFragmentnew renderFragment(..)
并传递它,尽管我现在对此感到非常困惑,并且无法在文档中找到任何参考,这使它看起来有点奇怪。
如何使渲染方法在这里适用于我的上下文?
更新
看起来好一点,但现在仍在工作虽然当我从这里阅读第二个示例时,我似乎根本不应该传递任何东西,因为它们能够调用
var cut = RenderComponent<FetchData>();