Code Monkey home page Code Monkey logo

Comments (7)

juanfperezperez avatar juanfperezperez commented on May 23, 2024

This would likely be better served by LocalGroupMembership resource and maybe a LocalUser resource since the Win32_Group class does not have a members property and the Win32_UserAccount does not have a memberof property. Also in Pester, the "Contain" assertion does not work with arrays, however "Be" does work.

Juan

from poshspec.

cdhunt avatar cdhunt commented on May 23, 2024

@devblackops The goal was to get a lot of the logic outside of the scope of the Pester functions to enable testing. The parsing of the scriptblock replaces the variables with their value - sort of half-evaluating the expression. There's probably a better way to do it. You could move that snippet into a new Private function like Get-LocalGroupMembers that you call from LocalGroup.

That is a good example. I'll see about making it supported without a function.

from poshspec.

devblackops avatar devblackops commented on May 23, 2024

@cdhunt Thanks. I'll mess around with extending LocalGroup or creating a new test for group membership.

from poshspec.

Sam-Martin avatar Sam-Martin commented on May 23, 2024

The other downside to parsing $TestExpression as a string is that when you have a variable in your expression it isn't interpolated in the printed output.
image

EDIT: I've quickly and hackily worked around this like so:

function Fix-PoshSpecInterpolation{
    param($CodeBlock)
    $matches = @();
    $CodeString = $CodeBlock.ToString().Trim()
    if($CodeString -match '\$[\w:]*'){
        foreach($variable in $matches.Values){
            $CodeString = $CodeString.replace($variable, "`"$(iex $variable)`"")
        }
    }
    return [scriptblock]::Create($CodeString)
}

Describe 'Website Host Entry' {
    File "$Env:SYSTEMROOT\system32\drivers\etc\hosts" $(Fix-PoshSpecInterpolation{ Should Contain $SiteName})
}

Which produces
image

Which is ugly as all hell and won't deal with quotes gracefully, but someone may find it useful.

from poshspec.

cdhunt avatar cdhunt commented on May 23, 2024

I assumed the value in the Should block would be a constant, but it should be possible to expand variables with $ExecutionContext.InvokeCommand.ExpandString() the same way we do on the other part of the expression.

from poshspec.

Sam-Martin avatar Sam-Martin commented on May 23, 2024

@cdhunt Hah, amazing, I didn't realise that's what that was doing.... So much cleaner now.

function Fix-PoshSpecInterpolation{
    param($CodeBlock)
    $CodeString = $CodeBlock.ToString().Trim()
    return [scriptblock]::Create($ExecutionContext.InvokeCommand.ExpandString($CodeString))
}

Describe 'Website Host Entry' {
    File "$Env:SYSTEMROOT\system32\drivers\etc\hosts" $(Fix-PoshSpecInterpolation{ Should Contain $SiteName})
}

Thank you! Would you be up for me submitting a PR with this fixed in the module?

from poshspec.

cdhunt avatar cdhunt commented on May 23, 2024

I just tested adding $assertion = $ExecutionContext.InvokeCommand.ExpandString($assertion) to Get-PoshSpecParam and it works with one caveat, the variable must be defined in Global scope. The way you solved it works really well, but does add a fair amount of extra "stuff" to the line.

I shortened it with an alias:

Set-Alias -Name exp -Value Fix-PoshSpecInterpolation

Describe "test should block" {
    $running = "Running"
    Service w32time Status (Exp{Should Be $running})
}

Which is easier on the user?

from poshspec.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.