当函数想要传递 renderFragment 时,如何使用不带任何参数的子组件渲染剃刀组件
How to render a razor components with subcomponents without any parameters when functions wants to be passed a renderFragment
我尝试在 Blazor 服务器端项目中使用 BUnit 进行组件测试。
我对此很陌生,并尝试开始一个真正简单的设置:
using var ctx = new TestContext();
ctx.Services.AddTransient<IProposalService, ProposalService>();
var cut = ctx.Render<Proposals>();
现在我不能 运行 因为 Rider 说:
Method 'Render' has 1 parameter(s) but is invoked with 0 argument(s)
在此之后,我检查了 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"/>
}
参考上面文档 link 的最后一节中的 在其他组件中渲染被测组件 部分。
他们在这里使用以下代码:
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'
- 当我 运行 第一次渲染时:ProposalTest.cs(35, 35): [CS7036] 没有给定的参数对应于 [= 的所需形式参数 'renderFragment' 60=]
- 当 运行 第二次渲染时:ProposalTest.cs (37, 35): [CS1061] 'RenderTreeBuilder' 不包含 'AddChildContent' 的定义并且没有可访问的扩展方法 'AddChildContent' 接受类型的第一个参数
'RenderTreeBuilder' 可以找到(您是否缺少 using 指令或程序集引用?)
我想也许我必须自己用 new renderFragment(..)
创建 renderFragment 并传递它,尽管我现在对此感到非常困惑并且无法在文档中找到任何参考有点奇怪的想法。
如何使渲染方法适用于我的上下文?
更新
看起来好多了,但现在还在用
虽然当我读到 here 的第二个例子时,我似乎根本不应该传递任何东西,因为它们可以调用
var cut = RenderComponent<FetchData>();
我只需要打电话:
ctx.RenderComponent<Proposals>();
小心我忽略了我的 IDE 对此提出了错误的建议
我尝试在 Blazor 服务器端项目中使用 BUnit 进行组件测试。 我对此很陌生,并尝试开始一个真正简单的设置:
using var ctx = new TestContext();
ctx.Services.AddTransient<IProposalService, ProposalService>();
var cut = ctx.Render<Proposals>();
现在我不能 运行 因为 Rider 说:
Method 'Render' has 1 parameter(s) but is invoked with 0 argument(s)
在此之后,我检查了 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"/>
}
参考上面文档 link 的最后一节中的 在其他组件中渲染被测组件 部分。
他们在这里使用以下代码:
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'
- 当我 运行 第一次渲染时:ProposalTest.cs(35, 35): [CS7036] 没有给定的参数对应于 [= 的所需形式参数 'renderFragment' 60=]
- 当 运行 第二次渲染时:ProposalTest.cs (37, 35): [CS1061] 'RenderTreeBuilder' 不包含 'AddChildContent' 的定义并且没有可访问的扩展方法 'AddChildContent' 接受类型的第一个参数 'RenderTreeBuilder' 可以找到(您是否缺少 using 指令或程序集引用?)
我想也许我必须自己用 new renderFragment(..)
创建 renderFragment 并传递它,尽管我现在对此感到非常困惑并且无法在文档中找到任何参考有点奇怪的想法。
如何使渲染方法适用于我的上下文?
更新
看起来好多了,但现在还在用
虽然当我读到 here 的第二个例子时,我似乎根本不应该传递任何东西,因为它们可以调用
var cut = RenderComponent<FetchData>();
我只需要打电话:
ctx.RenderComponent<Proposals>();
小心我忽略了我的 IDE 对此提出了错误的建议