问题标签 [bunit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 有没有办法在 bunit 测试中设置 OnAfterRender 方法的 firstRender-Variable?
想象一下,我有以下课程,我想同时测试 thefirstRender = false
和firstRender=true
“路径”。为此,我使用 bunit 和 xunit。
有没有办法在 bunit 测试中设置 OnAfterRender 方法的 firstRender-Variable?我必须调整 RenderComponent-Parameters 吗?
c# - 当函数想要传递renderFragment时,如何使用没有任何参数的子组件渲染剃须刀组件
我尝试在 Blazor 服务器端项目中使用 BUnit 进行组件测试。我对此很陌生,并试图开始一个真正简单的设置:
现在我无法运行它,因为 Rider 声明:
方法“渲染”有 1 个参数,但使用 0 个参数调用
在此之后,我检查了文档如何为此传递参数。由于我的组件Proposals
中没有任何[parameter]
标签,因此只有两次注入:
所以我虽然可能缺少一些 ChildContent ,因为我使用的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>();
c# - 为什么(等待 DbConnection.QueryAsync(sql)).ToList() 在某些情况下使用 bunit 进行测试失败,而在其他情况下则出现两个不同的错误?
我尝试为EditProposal
Blazor 服务器端项目中的组件编写 bunit 测试。我有奇怪的行为,我的测试在 10 次中有 1 次继续没有错误,而其他时候我得到以下错误之一:
有时错误
这是我的基本测试设置:
以下方法失败:
正是这一行:var skills = (await DbConnection.QueryAsync<Skill>(sql)).ToList();
我在其中调用此方法ProposalService
,用于将特定提案从数据库加载到我的编辑提案中:
它似乎与dapper方法有关。
对此真的很奇怪,它只发生在 bunit 测试中,而不会发生在浏览器或服务方法的集成测试中。我想我可能不得不完全模拟该服务,但它似乎更像是一个错误,或者我的代码有什么问题吗?
如何在不必模拟服务的情况下解决此问题?
更新
我能够在这里找到一个可能的答案。
给第二种方法另一个连接似乎使它在较少的情况下失败。注意:我使用以下服务放弃了自己打开连接:
services.AddTransient<IDbConnection>(sp => new SqlConnection(DatabaseUtils.ConnectionString));
在startup.cs
modal-dialog - 如何用 bunit 打开一个炫酷的模态?
我想用 bunit 测试一个模态是否打开。问题是,模态不会被渲染。如何用 bunit 打开一个炫酷的模态?
在我的测试组件中创建模态:
我的测试课:
nunit - 等待 Blazor 组件使用 nUnit 在 bUnit 中加载变量
我试图在我的测试中呈现“组件 A”,它里面有以下 html:
'functions' 是在 CS 文件中为组件创建的变量,如下所示:
并像这样填充:
现在,当我在测试中渲染我的组件时,我会进行标记匹配:
这通过了,但随后我进行了相同类型的检查,但对于加载“函数”变量时应该出现的“加载”标记,但它总是失败。
谁能解释我如何加载这个组件并一路检查它的标记?
编辑:
完整的测试用例 -
渲染 UI 组件的方法 -
unit-testing - Bunit 2路绑定
我有一个Search
实现去抖动计时器的组件,因此它不会调用ValueChanged
(因此不会立即更新与其相关的属性)。
我的问题
bUnit 测试似乎不会以两种方式绑定我正在更新的值。
测试代码
我本来希望注释掉的部分可以工作(因为它们与ValueChanged
更新属性做的事情相同),但它们失败了。
组件
如何使用:
它可以像这样使用,只要更新网格就会Query
更新。
这在实践中效果很好,但是在测试时我遇到了问题。
c# - 如何让后备服务提供者返回编译时未知的类型参数的 Mock
我正在为 Razor 组件编写 BUnit 测试,该组件已注入如下依赖项:
对于我的测试,我创建了一个后备服务提供程序MoqServiceProvider
,用于注册我的模拟依赖项。 但我也希望后备服务提供者Moq<MyType>
默认为我没有明确模拟的任何类型提供一个实例。
后备服务提供者如下所示
我在测试中这样使用它(我使用 AutoFixture 来提供测试参数):
如果我运行它,我会得到一个错误Cannot provide a value for property 'SecondService' on type 'MyComponent'
,因为我还没有注册一个Mock<IMySecondService>
with的实例MockServiceProvider
。
我如何MockServiceProvider
返回我没有明确注册的每种类型的模拟(类似return Mock<serviceType
)?我的一些 Razor 组件有很多依赖项,我不想注入那些对每个测试都无关紧要的组件。
blazor-webassembly - .net blazor wasm 测试具有本地化功能的 bunit
我正在构建一个 blazor webassembly 站点,我想使用 bunit 进行测试。
我在使用本地化的组件时遇到问题,我收到以下错误:
System.InvalidOperationException 无法为类型“Path.To.Component”的属性“L”提供值。没有“Microsoft.Extensions.Localization.IStringLocalizer`1[Path.To.Component]”类型的注册服务。在 Microsoft.AspNetCore.Components.ComponentFactory.<>c__DisplayClass7_0.g__Initialize|1(IServiceProvider serviceProvider, IComponent 组件)
我已经尝试在测试项目上安装本地化,但这不起作用。
blazor - bunit 等到 OnInitializedAsync 在断言字段之前完成
我有一个将其客户加载到表中的 blazor 服务器组件,它在 OnInitializedAsync 方法中获取客户。有没有办法等待 OnInitializedAsync 完成?
零件
我需要我的测试等到完成才能运行我的测试。
如果我单独运行测试运行良好,但当我运行所有测试时失败并出现错误
预期 tds.Count 为 2,但发现为 0。
嘲笑
blazor - bunit Validate NavigationManager Url on async button click
我有一个有两个按钮的组件,一个是删除客户,然后返回客户列表,第二个是取消按钮,返回客户列表。
删除的代码被模拟并返回true。当我对取消按钮进行单元测试时,它可以工作,但是对于删除按钮,它没有给我正确的 url
删除测试失败并显示以下内容
预期 nav.Uri 为“http://localhost/customers”,但为“http://localhost/”