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