使用现有 json 文件通过 Pester 和 TestDrive 进行测试

Use existing json file to test with Pester and TestDrive

我有一个 json 文件,它在自动化过程中被操纵,我已经为它创建了一个单元测试,它工作得很好,但我正在访问文件系统,这对我来说不是路要走。然后我发现了 Pester TestDrive,但我不明白如何让它在我的用例中工作。

这是我的示例 json 文件 (user.json):

{
    "name":"",
    "age": ""
}

这是我的函数 (SetUser.ps1):

function SetUser {
    param (
        $Name,
        $Age
    )

    $userFilePath = "$PSScriptRoot/user.json"
    
    $user = Get-Content $userFilePath -Raw | ConvertFrom-Json
    $user.name = $Name
    $user.age = $Age
}

这是我当前的测试 (SetUser.Test.ps1):

Describe "SetUser" {
    It "Returns expected output" {
        # Arrange
        $userFilePath = "$PSScriptRoot/user.json"
        $name = "Some Random User Name"
        $age = 30
        
        # Act
        SetUser -Name $name -Age $age

        # Assert
        $user = Get-Content $userFilePath -Raw | ConvertFrom-Json
        $user.name | Should -Be $name
        $user.age | Should -Be $age
    }
}

如何使用 TestDrive 测试此案例?

我会在函数 Set-User 中添加一个参数 $userFilePath 以便您可以通过测试路径。为此参数定义一个默认值,这样您就不需要更改调用方代码即可正常使用。

function SetUser {
    param (
        $Name,
        $Age,
        $userFilePath = "$PSScriptRoot/user.json"
    )
    
    $user = Get-Content $userFilePath -Raw | ConvertFrom-Json
    $user.name = $Name
    $user.age = $Age
}

测试代码:

Describe "SetUser" {
    It "Returns expected output" {
        # Arrange
        $userFilePath = "TestDrive:/user.json"
        $name = "Some Random User Name"
        $age = 30
        
        # Act
        SetUser -Name $name -Age $age -userFilePath $userFilePath

        # Assert
        $user = Get-Content $userFilePath -Raw | ConvertFrom-Json
        $user.name | Should -Be $name
        $user.age | Should -Be $age
    }
}

普通代码:

SetUser -Name Foo -Age 42   # $userFilePath defaults to "$PSScriptRoot/user.json"

您可能还想添加一个 Should -HaveParameter 测试用例来检查参数 -userFilePath.

的正确默认值