Skip to content

Commit c4cf0b2

Browse files
committed
Docs: Updates to external ressources and passing params
1 parent 07c7c9c commit c4cf0b2

9 files changed

Lines changed: 295 additions & 6 deletions

File tree

docs/samples/components/AllKindsOfParams.razor

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,7 @@
1111

1212
[Parameter]
1313
public EventCallback OnSomething { get; set; }
14+
15+
[Parameter]
16+
public RenderFragment ChildContent { get; set; }
1417
}

docs/samples/samples.sln

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
# Visual Studio 15
4+
VisualStudioVersion = 15.0.26124.0
5+
MinimumVisualStudioVersion = 15.0.26124.0
6+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "bunit.docs.samples", "components\bunit.docs.samples.csproj", "{60E2C52E-0DF6-445A-9568-ABA05CB2E6AF}"
7+
EndProject
8+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{FC897929-3A4D-4276-9AF4-C77B0FAF221E}"
9+
EndProject
10+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "bunit.docs.mstest.samples", "tests\mstest\bunit.docs.mstest.samples.csproj", "{C2060A20-8C56-4678-B65C-DCF52D70223D}"
11+
EndProject
12+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "bunit.docs.nunit.samples", "tests\nunit\bunit.docs.nunit.samples.csproj", "{0BC8DBEB-500A-4DB2-9123-7617D24E5053}"
13+
EndProject
14+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "bunit.docs.xunit.razor.samples", "tests\razor\bunit.docs.xunit.razor.samples.csproj", "{30518354-6437-4474-8198-870AA8B07A2D}"
15+
EndProject
16+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "bunit.docs.xunit.samples", "tests\xunit\bunit.docs.xunit.samples.csproj", "{3B8B3B0E-CA33-4C76-901D-219F5FF848B3}"
17+
EndProject
18+
Global
19+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
20+
Debug|Any CPU = Debug|Any CPU
21+
Debug|x64 = Debug|x64
22+
Debug|x86 = Debug|x86
23+
Release|Any CPU = Release|Any CPU
24+
Release|x64 = Release|x64
25+
Release|x86 = Release|x86
26+
EndGlobalSection
27+
GlobalSection(SolutionProperties) = preSolution
28+
HideSolutionNode = FALSE
29+
EndGlobalSection
30+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
31+
{60E2C52E-0DF6-445A-9568-ABA05CB2E6AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
32+
{60E2C52E-0DF6-445A-9568-ABA05CB2E6AF}.Debug|Any CPU.Build.0 = Debug|Any CPU
33+
{60E2C52E-0DF6-445A-9568-ABA05CB2E6AF}.Debug|x64.ActiveCfg = Debug|Any CPU
34+
{60E2C52E-0DF6-445A-9568-ABA05CB2E6AF}.Debug|x64.Build.0 = Debug|Any CPU
35+
{60E2C52E-0DF6-445A-9568-ABA05CB2E6AF}.Debug|x86.ActiveCfg = Debug|Any CPU
36+
{60E2C52E-0DF6-445A-9568-ABA05CB2E6AF}.Debug|x86.Build.0 = Debug|Any CPU
37+
{60E2C52E-0DF6-445A-9568-ABA05CB2E6AF}.Release|Any CPU.ActiveCfg = Release|Any CPU
38+
{60E2C52E-0DF6-445A-9568-ABA05CB2E6AF}.Release|Any CPU.Build.0 = Release|Any CPU
39+
{60E2C52E-0DF6-445A-9568-ABA05CB2E6AF}.Release|x64.ActiveCfg = Release|Any CPU
40+
{60E2C52E-0DF6-445A-9568-ABA05CB2E6AF}.Release|x64.Build.0 = Release|Any CPU
41+
{60E2C52E-0DF6-445A-9568-ABA05CB2E6AF}.Release|x86.ActiveCfg = Release|Any CPU
42+
{60E2C52E-0DF6-445A-9568-ABA05CB2E6AF}.Release|x86.Build.0 = Release|Any CPU
43+
{C2060A20-8C56-4678-B65C-DCF52D70223D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
44+
{C2060A20-8C56-4678-B65C-DCF52D70223D}.Debug|Any CPU.Build.0 = Debug|Any CPU
45+
{C2060A20-8C56-4678-B65C-DCF52D70223D}.Debug|x64.ActiveCfg = Debug|Any CPU
46+
{C2060A20-8C56-4678-B65C-DCF52D70223D}.Debug|x64.Build.0 = Debug|Any CPU
47+
{C2060A20-8C56-4678-B65C-DCF52D70223D}.Debug|x86.ActiveCfg = Debug|Any CPU
48+
{C2060A20-8C56-4678-B65C-DCF52D70223D}.Debug|x86.Build.0 = Debug|Any CPU
49+
{C2060A20-8C56-4678-B65C-DCF52D70223D}.Release|Any CPU.ActiveCfg = Release|Any CPU
50+
{C2060A20-8C56-4678-B65C-DCF52D70223D}.Release|Any CPU.Build.0 = Release|Any CPU
51+
{C2060A20-8C56-4678-B65C-DCF52D70223D}.Release|x64.ActiveCfg = Release|Any CPU
52+
{C2060A20-8C56-4678-B65C-DCF52D70223D}.Release|x64.Build.0 = Release|Any CPU
53+
{C2060A20-8C56-4678-B65C-DCF52D70223D}.Release|x86.ActiveCfg = Release|Any CPU
54+
{C2060A20-8C56-4678-B65C-DCF52D70223D}.Release|x86.Build.0 = Release|Any CPU
55+
{0BC8DBEB-500A-4DB2-9123-7617D24E5053}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
56+
{0BC8DBEB-500A-4DB2-9123-7617D24E5053}.Debug|Any CPU.Build.0 = Debug|Any CPU
57+
{0BC8DBEB-500A-4DB2-9123-7617D24E5053}.Debug|x64.ActiveCfg = Debug|Any CPU
58+
{0BC8DBEB-500A-4DB2-9123-7617D24E5053}.Debug|x64.Build.0 = Debug|Any CPU
59+
{0BC8DBEB-500A-4DB2-9123-7617D24E5053}.Debug|x86.ActiveCfg = Debug|Any CPU
60+
{0BC8DBEB-500A-4DB2-9123-7617D24E5053}.Debug|x86.Build.0 = Debug|Any CPU
61+
{0BC8DBEB-500A-4DB2-9123-7617D24E5053}.Release|Any CPU.ActiveCfg = Release|Any CPU
62+
{0BC8DBEB-500A-4DB2-9123-7617D24E5053}.Release|Any CPU.Build.0 = Release|Any CPU
63+
{0BC8DBEB-500A-4DB2-9123-7617D24E5053}.Release|x64.ActiveCfg = Release|Any CPU
64+
{0BC8DBEB-500A-4DB2-9123-7617D24E5053}.Release|x64.Build.0 = Release|Any CPU
65+
{0BC8DBEB-500A-4DB2-9123-7617D24E5053}.Release|x86.ActiveCfg = Release|Any CPU
66+
{0BC8DBEB-500A-4DB2-9123-7617D24E5053}.Release|x86.Build.0 = Release|Any CPU
67+
{30518354-6437-4474-8198-870AA8B07A2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
68+
{30518354-6437-4474-8198-870AA8B07A2D}.Debug|Any CPU.Build.0 = Debug|Any CPU
69+
{30518354-6437-4474-8198-870AA8B07A2D}.Debug|x64.ActiveCfg = Debug|Any CPU
70+
{30518354-6437-4474-8198-870AA8B07A2D}.Debug|x64.Build.0 = Debug|Any CPU
71+
{30518354-6437-4474-8198-870AA8B07A2D}.Debug|x86.ActiveCfg = Debug|Any CPU
72+
{30518354-6437-4474-8198-870AA8B07A2D}.Debug|x86.Build.0 = Debug|Any CPU
73+
{30518354-6437-4474-8198-870AA8B07A2D}.Release|Any CPU.ActiveCfg = Release|Any CPU
74+
{30518354-6437-4474-8198-870AA8B07A2D}.Release|Any CPU.Build.0 = Release|Any CPU
75+
{30518354-6437-4474-8198-870AA8B07A2D}.Release|x64.ActiveCfg = Release|Any CPU
76+
{30518354-6437-4474-8198-870AA8B07A2D}.Release|x64.Build.0 = Release|Any CPU
77+
{30518354-6437-4474-8198-870AA8B07A2D}.Release|x86.ActiveCfg = Release|Any CPU
78+
{30518354-6437-4474-8198-870AA8B07A2D}.Release|x86.Build.0 = Release|Any CPU
79+
{3B8B3B0E-CA33-4C76-901D-219F5FF848B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
80+
{3B8B3B0E-CA33-4C76-901D-219F5FF848B3}.Debug|Any CPU.Build.0 = Debug|Any CPU
81+
{3B8B3B0E-CA33-4C76-901D-219F5FF848B3}.Debug|x64.ActiveCfg = Debug|Any CPU
82+
{3B8B3B0E-CA33-4C76-901D-219F5FF848B3}.Debug|x64.Build.0 = Debug|Any CPU
83+
{3B8B3B0E-CA33-4C76-901D-219F5FF848B3}.Debug|x86.ActiveCfg = Debug|Any CPU
84+
{3B8B3B0E-CA33-4C76-901D-219F5FF848B3}.Debug|x86.Build.0 = Debug|Any CPU
85+
{3B8B3B0E-CA33-4C76-901D-219F5FF848B3}.Release|Any CPU.ActiveCfg = Release|Any CPU
86+
{3B8B3B0E-CA33-4C76-901D-219F5FF848B3}.Release|Any CPU.Build.0 = Release|Any CPU
87+
{3B8B3B0E-CA33-4C76-901D-219F5FF848B3}.Release|x64.ActiveCfg = Release|Any CPU
88+
{3B8B3B0E-CA33-4C76-901D-219F5FF848B3}.Release|x64.Build.0 = Release|Any CPU
89+
{3B8B3B0E-CA33-4C76-901D-219F5FF848B3}.Release|x86.ActiveCfg = Release|Any CPU
90+
{3B8B3B0E-CA33-4C76-901D-219F5FF848B3}.Release|x86.Build.0 = Release|Any CPU
91+
EndGlobalSection
92+
GlobalSection(NestedProjects) = preSolution
93+
{C2060A20-8C56-4678-B65C-DCF52D70223D} = {FC897929-3A4D-4276-9AF4-C77B0FAF221E}
94+
{0BC8DBEB-500A-4DB2-9123-7617D24E5053} = {FC897929-3A4D-4276-9AF4-C77B0FAF221E}
95+
{30518354-6437-4474-8198-870AA8B07A2D} = {FC897929-3A4D-4276-9AF4-C77B0FAF221E}
96+
{3B8B3B0E-CA33-4C76-901D-219F5FF848B3} = {FC897929-3A4D-4276-9AF4-C77B0FAF221E}
97+
EndGlobalSection
98+
EndGlobal

docs/samples/tests/razor/AllKindsOfParamsTest.razor

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,41 @@
1313
OnSomething=@(() => { /* handle callback */ })>
1414
</AllKindsOfParams>
1515
</ComponentUnderTest>
16+
</Fixture>
17+
18+
<Fixture Test="f => {}">
19+
<ComponentUnderTest>
20+
<AllKindsOfParams>
21+
<h1>Hello World</h1>
22+
</AllKindsOfParams>
23+
</ComponentUnderTest>
24+
</Fixture>
25+
26+
<Fixture Test="f => {}">
27+
<ComponentUnderTest>
28+
<AllKindsOfParams>
29+
<Counter />
30+
</AllKindsOfParams>
31+
</ComponentUnderTest>
32+
</Fixture>
33+
34+
<Fixture Test="f => {}">
35+
<ComponentUnderTest>
36+
<AllKindsOfParams>
37+
<Alert Heading="Alert heading" Type="AlertType.Warning">
38+
<p>Hello World</p>
39+
</Alert>
40+
</AllKindsOfParams>
41+
</ComponentUnderTest>
42+
</Fixture>
43+
44+
<Fixture Test="f => {}">
45+
<ComponentUnderTest>
46+
<AllKindsOfParams>
47+
<h1>Below you will find a most interesting alert!</h1>
48+
<Alert Heading="Alert heading" Type="AlertType.Warning">
49+
<p>Hello World</p>
50+
</Alert>
51+
</AllKindsOfParams>
52+
</ComponentUnderTest>
1653
</Fixture>

docs/samples/tests/xunit/AllKindsOfParamsTest.cs

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,5 +62,61 @@ public void EventCallbackTypes()
6262
.Add(p => p.OnSomething, () => { /* handle callback */ })
6363
);
6464
}
65+
66+
[Fact]
67+
public void HtmlAsChildContent()
68+
{
69+
using var ctx = new TestContext();
70+
71+
// Using factory method
72+
var cut1 = ctx.RenderComponent<AllKindsOfParams>(
73+
ChildContent("<h1>Hello World</h1>")
74+
);
75+
76+
// Using parameter builder
77+
var cut2 = ctx.RenderComponent<AllKindsOfParams>(parameters => parameters
78+
.AddChildContent("<h1>Hello World</h1>")
79+
);
80+
}
81+
82+
[Fact]
83+
public void ComponentAsChildContent()
84+
{
85+
using var ctx = new TestContext();
86+
87+
// Using factory method
88+
var cut1 = ctx.RenderComponent<AllKindsOfParams>(
89+
ChildContent<Counter>()
90+
);
91+
92+
// Using parameter builder
93+
var cut2 = ctx.RenderComponent<AllKindsOfParams>(parameters => parameters
94+
.AddChildContent<Counter>()
95+
);
96+
}
97+
98+
[Fact]
99+
public void ComponentWithParamsAsChildContent()
100+
{
101+
using var ctx = new TestContext();
102+
103+
// Using factory method
104+
var cut1 = ctx.RenderComponent<AllKindsOfParams>(
105+
ChildContent<Alert>(
106+
("Heading", "Alert heading"),
107+
("Type", AlertType.Warning),
108+
ChildContent("<p>Hello World</p>")
109+
)
110+
);
111+
112+
// Using parameter builder
113+
var cut2 = ctx.RenderComponent<AllKindsOfParams>(parameters => parameters
114+
.AddChildContent<Alert>(alertParameters => alertParameters
115+
.Add(p => p.Heading, "Alert heading")
116+
.Add(p => p.Type, AlertType.Warning)
117+
.AddChildContent("<p>Hello World</p>")
118+
)
119+
);
120+
}
65121
}
66122
}

docs/site/docs/external-resources.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,13 @@ Here is a list of some of the content out on the web that covers bUnit. If you p
1111
- **[Testing Blazor Components - session from .NET Conf - Focus on Blazor](https://youtu.be/5d-uIxx1cUE)**
1212
Content is based on beta-5.1 of bUnit.
1313

14-
### Twitch/Live coding
14+
### PodCasts/Twitch/YouTube/Live coding
15+
16+
- **[.NET Rocks! - Testing Blazor Apps with Egil Hansen](https://www.dotnetrocks.com/?show=1690)**
17+
Content is based on beta-7 of bUnit.
18+
19+
- **[CSharpFritz's Twitch Show: Egil Hansen joins us for Blazor Testing and Component Design](https://youtu.be/wY1CyyJ4Hzs?t=292)**
20+
Content is based on beta-6 of bUnit.
1521

1622
- **[Blazor StateHasChanged: Blazor Component Unit Testing with Egil Hansen](https://www.youtube.com/watch?v=x-zzcwHdZOk&t=211)**
1723
Content is based on beta-5.1 of bUnit.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
uid: awaiting-async-state
3+
title: Awaiting an Asynchronous State Change in a Component Under Test
4+
---
5+
6+
# Awaiting an Asynchronous State Change

docs/site/docs/providing-input/passing-parameters-to-components.md

Lines changed: 80 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
---
22
uid: passing-parameters-to-components
3-
title: Passing Parameters to a Component Under Test
3+
title: Passing Parameters to Components
44
---
55

6-
# Passing Parameters to a Component Under Test
6+
# Passing Parameters to Components
77

8-
bUnit comes with a bunch of ways to pass parameters to a component under test.
8+
bUnit comes with a bunch of ways to pass parameters to components.
99

1010
In Razor-based tests, those written in `.razor` files, passing parameters is exactly the same as in your normal Blazor pages and components.
1111

@@ -86,11 +86,11 @@ Using either C# or Razor test code, this can be done like this:
8686
8787
# [C# test code](#tab/csharp)
8888
89-
[!code-csharp[](../../../samples/tests/xunit/AllKindsOfParamsTest.cs#L48-L63)]
89+
[!code-csharp[](../../../samples/tests/xunit/AllKindsOfParamsTest.cs#L47-L63)]
9090
9191
All of these examples does the same thing, here is what is going on:
9292
93-
1. The first and second example uses the `EventCallback` factory method in <xref:Bunit.ComponentParameterFactory> (there are many overloads that take different kinds of `Action` and `Func` delegates), to pass a lambda as the event callback to the specified parameter.
93+
1. The first and second example uses the `EventCallback` factory method in <xref:Bunit.ComponentParameterFactory> (there are many overloads that take different kinds of `Action` and `Func` delegates), to pass a lambda as the event callback to the specified parameter.
9494
2. The last example uses the <xref:Bunit.ComponentParameterBuilder`1>'s `Add` method, which takes a parameter selector expression that selects the parameter using a lambda, and forces you to provide the correct type of callback method. This makes the builders methods strongly typed and refactor safe.
9595
9696
# [Razor test code](#tab/razor)
@@ -103,6 +103,81 @@ This is just regular Blazor parameter passing, which is the same for both `Fixtu
103103
104104
### ChildContent Parameters
105105
106+
The `ChildContent` parameter in Blazor is represented by a `RenderFragment`. In Blazor, this can be both contain regular HTML markup, it can be Razor markup, e.g. other component declarations, or a mix of the two. If it is another component, then that component can also receive child content, and so on and so forth.
107+
108+
The following subsections has different examples of child content being passed to the following component:
109+
110+
[!code-csharp[AllKindsOfParams.razor](../../../samples/components/AllKindsOfParams.razor#L15-L16)]
111+
112+
#### Passing HTML to the ChildContent Parameter
113+
114+
# [C# test code](#tab/csharp)
115+
116+
[!code-csharp[](../../../samples/tests/xunit/AllKindsOfParamsTest.cs#L71-L79)]
117+
118+
All of these examples does the same thing, here is what is going on:
119+
120+
1. The first example uses the `ChildContent` factory method in <xref:Bunit.ComponentParameterFactory>, to pass a HTML markup string as the input to the `ChildContent` parameter.
121+
2. The second example uses the <xref:Bunit.ComponentParameterBuilder`1>'s `AddChildContent` method to pass a HTML markup string as the input to the `ChildContent` parameter.
122+
123+
# [Razor test code](#tab/razor)
124+
125+
[!code-html[](../../../samples/tests/razor/AllKindsOfParamsTest.razor#L18-L24)]
126+
127+
This is just regular Blazor child content parameter passing, e.g. as child content to the component under test, which is the same for both `Fixture` and `SnapshotTest` razor tests.
128+
129+
***
130+
131+
#### Passing a Component to the ChildContent Parameter
132+
133+
To pass a component, e.g. the classic `<Counter>` component, which does not take any parameters, to a component under test, do the following:
134+
135+
# [C# test code](#tab/csharp)
136+
137+
[!code-csharp[](../../../samples/tests/xunit/AllKindsOfParamsTest.cs#L87-L95)]
138+
139+
All of these examples does the same thing, here is what is going on:
140+
141+
1. The first example uses the `ChildContent<TChildComponent>` factory method in <xref:Bunit.ComponentParameterFactory>, where `TChildComponent` is the (child) component that should be passed to the component under test.
142+
2. The second example uses the <xref:Bunit.ComponentParameterBuilder`1>'s `AddChildContent<TChildComponent>` method, where `TChildComponent` is the (child) component that should be passed to the component under test.
143+
144+
# [Razor test code](#tab/razor)
145+
146+
[!code-html[](../../../samples/tests/razor/AllKindsOfParamsTest.razor#L26-L32)]
147+
148+
This is just regular Blazor child content parameter passing, where the `<Counter />` component is declared inside the component under test. This is the same for both `Fixture` and `SnapshotTest` razor tests.
149+
150+
***
151+
152+
#### Passing a Component with Parameters to the ChildContent Parameter
153+
154+
To pass a component with parameters to a component under test, e.g. the `<Alert>` component with the following parameters,, e.g. the classic `<Counter>` component, do the following:
155+
156+
[!code-csharp[Alert.razor](../../../samples/components/Alert.razor#L2-L4)]
157+
158+
# [C# test code](#tab/csharp)
159+
160+
[!code-csharp[](../../../samples/tests/xunit/AllKindsOfParamsTest.cs#L103-L119)]
161+
162+
All of these examples does the same thing, here is what is going on:
163+
164+
1. The first example uses the `ChildContent<TChildComponent>` factory method in <xref:Bunit.ComponentParameterFactory>, where `TChildComponent` is the (child) component that should be passed to the component under test. `ChildContent<TChildComponent>` factory method can take zero or more component parameters as input itself, which will be passed to the `TChildComponent` component, in this case, the `<Alert>` component.
165+
2. The second example uses the <xref:Bunit.ComponentParameterBuilder`1>'s `AddChildContent<TChildComponent>` method, where `TChildComponent` is the (child) component that should be passed to the component under test. The `AddChildContent<TChildComponent>` method takes an optional <xref:Bunit.ComponentParameterBuilder`1> as input, which can be used to pass parameters to the `TChildComponent` component, in this case, the `<Alert>` component.
166+
167+
# [Razor test code](#tab/razor)
168+
169+
[!code-html[](../../../samples/tests/razor/AllKindsOfParamsTest.razor#L34-L42)]
170+
171+
This is just regular Blazor child content parameter passing, where the `<Alert>` component is declared inside the component under test, and any parameters is passed to it like normal in Blazor. This is the same for both `Fixture` and `SnapshotTest` razor tests.
172+
173+
***
174+
175+
#### Passing a mix of Razor and HTML to ChildContent Parameter
176+
177+
It is currently only possible to pass a mix of HTML markup and Razor markup to a ChildContent parameter using Razor based tests. This is illustrated in the example below:
178+
179+
[!code-html[](../../../samples/tests/razor/AllKindsOfParamsTest.razor#L44-L53)]
180+
106181
### RenderFragment Parameters
107182
108183
### Templates Parameters

docs/site/docs/toc.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,13 @@
1313
# [Interaction](xref:interaction)
1414
## [Trigger Event Handlers](xref:trigger-event-handlers)
1515
## [Trigger Renders](xref:trigger-renders)
16+
## [Awaiting an Asynchronous State Change](xref:awaiting-async-state)
1617

1718
# [Verifying output](xref:verification)
1819
## [Verify Markup](xref:verify-markup)
1920
## [Verify Component State](xref:verify-component-state)
2021
## [Semantic HTML Markup Comparison](xref:semantic-html-comparison)
22+
## [Asynchronous Assertion of Changes](xref:async-assertion)
2123

2224
# [Mocking](xref:mocking)
2325
## [Mocking Authorization](xref:mocking-auth)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
uid: async-assertion
3+
title: Asynchronous Assertion of Change in a Component Under Test
4+
---
5+
6+
# Asynchronous Assertion of Change in a Component Under Test

0 commit comments

Comments
 (0)