我尝试在Blazor服务器端项目中使用BUnit进行组件测试。我对此很陌生,并尝试开始一个真正简单的设置:
using var ctx = new TestContext();
ctx.Services.AddTransient<IProposalService, ProposalService>();
var cut = ctx.Render<Proposals>();
现在我不能运行这个,因为Rider声明:
方法"Render"有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>());
- 第一个渲染:方法"render"有1个参数,但使用0个参数调用
- 第二个呈现:无法解析符号"AddChildContent">
- 当我运行第一个render时:ProposalTest.cs(35,35(:[CS7036]没有给出与"TestContext"的必需形式参数"renderFragment"相对应的参数。Render(RenderFragment('
- 运行第二个呈现时:ProposalTest.cs(37,35(:[CS1061]"RenderTreeBuilder"不包含"AddChildContent"的定义,也没有可访问的扩展方法"AddChildContent'"接受类型为的第一个参数未能找到"RenderTreeBuilder"(是否缺少using指令或程序集引用?(
我想也许我必须用new renderFragment(..)
自己创建renderFragment并传递它,尽管我现在对此感到非常困惑,而且在文档中找不到任何参考,这让它看起来有点奇怪。
如何使渲染方法适用于此处的上下文?
更新
它看起来稍微好一点,但现在仍然有效虽然当我读到这里的第二个例子时,我似乎根本不应该传递任何东西,因为他们可以打电话var cut = RenderComponent<FetchData>();
我只需要打电话:
ctx.RenderComponent<Proposals>();
请注意,我忽略了我的IDE对这个提出了错误的建议