[英]Invoke-Pester to only run a single Assert/It block
我正在為我的 Powershell 模塊編寫單元測試,每個模塊都有一個文件,每個函數都有Describe
塊。 Context
塊沿着我嘗試使用一些排列代碼測試的行為組織測試,我的It
塊包含最少的排列/動作代碼和斷言。
我可以使用Invoke-Pester "Path/To/Module"
將我的測試限制為僅運行單個測試文件 我還可以使用Invoke-Pester "Path/To/Module" -TestName @("RunThisDescribe","AndRunThisDescribe")
根據Describe
塊進行限制Invoke-Pester "Path/To/Module" -TestName @("RunThisDescribe","AndRunThisDescribe")
當我向現有file
/ Describe
/ Context
添加新斷言(通過新的It
塊)時,我想單獨測試/調試我的新斷言,而不運行給定 describe/context 的其余斷言(但使用我在描述/上下文范圍內設置的任何模擬/變量仍然可用。
在開發新斷言時,我一直在注釋掉我現有的斷言,然后在完成新測試后刪除塊注釋並運行它們。 這有效,但很笨重。
有沒有辦法運行Invoke-Pester
只執行給定的It
列表? 除了讓所有測試都運行或將它們注釋掉之外,是否有更好的工作流程來開發/調試新測試?
看起來沒有任何方法可以通過It
塊的名稱指定要運行的測試。
您可以將新測試拆分為新的Describe
塊,然后按照您的描述通過-TestName
參數運行它,或者給它一個-Tag
然后通過Invoke-Pester
指定該標簽,但這似乎不適用於一個嵌套的Describe
,它必須在頂層。
我認為這對您不起作用,因為您的模擬和變量將在另一個描述中。
安裝了 PowerShell 擴展的 VSCode 允許您通過描述頂部的“運行測試”鏈接運行單個描述塊,這對嵌套塊有效。 但是我不確定這是否會導致調用父 Describe 塊中的 Mocks/Variables(我的猜測不會)。
嵌套的Describe
示例,可以在 VSCode 中單獨運行:
Describe 'My-Tests' {
It 'Does something' {
$true | Should -Be $true
}
Describe 'NewTest' {
It 'Does something new' {
$true | Should -Be $true
}
}
}
很遺憾,您目前不能將標簽放在Context
塊上以過濾/過濾某些測試集。 這是2 年前要求的功能,但實現起來似乎並不簡單。
從 Pester 版本 5 開始,您可以在所有內容上添加-Tag
: Describe
、 Context
、 It
這使得運行特定斷言變得非常容易,僅此而已。 您甚至可以使用-ExcludeTag
排除特定代碼。
有關詳細信息,請參閱https://github.com/pester/Pester#tags 。
如果您打算從版本 4 遷移到 5,還請查看制動更改!
要添加到Tofuburger 的答案,並且基於 Pester 5.3.1,您還可以在測試腳本中基於標簽以編程方式操作測試。
Describe 'Colour' -Tag 'Epistemology' {
BeforeAll {
$ParentBlockTags = $____Pester.CurrentBlock.Tag
if ($ParentBlockTags -eq 'Epistemology')
{
Set-ItResult -Inconclusive
}
}
BeforeEach {
$ItTags = $____Pester.CurrentTest.Tag
if ($ItTags -eq 'HSL')
{
Set-ItResult -Skipped -Because 'Not implemented'
}
}
It 'Saturates' -Tag 'HSL' {
1 | Should -Be 2
}
It 'Greens' -Tag 'RGB' {
1 | Should -Be 3
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.