Skip to content

Should-BeString does not truncate identical prefix in diff message #2951

Description

@fflaten

Discussed in #2946

Originally posted by Der-Bayer July 31, 2026
We are migrating a Pester test suite from Pester 5.7.1 to Pester 6.

Our tests compare the complete content of large generated files. The files can contain 10,000 and more lines. In Pester 5, we currently use:

$expected = Get-Content -LiteralPath $expectedPath -Raw
Get-Content -LiteralPath $actualPath -Raw | Should -BeExactly $expected

When this fails, Should -BeExactly provides useful output: it identifies the first differing character and truncates the unchanged prefix and suffix. This remains readable even for very large strings.

For the Pester 6 assertion syntax we tried:

$actual = Get-Content -LiteralPath $actualPath -Raw
$expected = Get-Content -LiteralPath $expectedPath -Raw

$actual | Should-BeString -Expected $expected -CaseSensitive

What is the recommended Pester 6 assertion, switch, or configuration setting to get the same diagnostic behavior as classic Should -BeExactly for large strings—specifically, showing the first difference and a limited context before and after it instead of rendering the full string?

If this behavior is not currently available, would it be reasonable to add it to Should-BeString?

Sidenote: TestDrive is not working for me, it expands to C:

Complete Pester File:

Describe 'Vergleich klassisch vs. neu' {
    BeforeAll {
        $actualPath = "TestDrive:\actual.txt"
        $expectedPath = "TestDrive:\expected.txt"

        $actualLines = 1..10000 | ForEach-Object {
            "Line {0:D5}" -f $_
        }

        $expectedLines = [string[]]$actualLines.Clone()
        $expectedLines[5432] = "Line 99999" # Change one line to make the test fail

        Set-Content -LiteralPath $actualPath   -Value $actualLines
        Set-Content -LiteralPath $expectedPath -Value $expectedLines
    }

    It 'V5 Syntax: BeExactly' {
        $expected = Get-Content $expectedPath -Raw
        Get-Content $actualPath -Raw | Should -BeExactly $expected
    }

    It 'V6 Syntax: Should-BeString' {
        $actual = Get-Content $actualPath -Raw
        $expected = Get-Content $expectedPath -Raw
        $actual | Should-BeString $expected 
    }
}
Collapsed Output (Cuttet / too long for GitHub)
Pester v6.1.0-alpha2

Running tests from 1 files.

Running tests from 'C:\Code\Pester-BeExactlyV6.Tests.ps1'
Describing Vergleich klassisch vs. neu
  [-] V5 Syntax: BeExactly 38ms
   Expected strings to be the same, but they were different.
   String lengths are both 120000.
   Strings differ at index 65189.
   Expected: '...5420␍␊Line 05421␍␊Line 05422␍␊Line 05423␍␊Line 05424␍␊Line 05425␍␊Line 05426␍␊Line 05427␍␊Line 05428␍␊Line 05429␍␊Line 05430␍␊Line 05431␍␊Line 05432␍␊Line 99999␍␊Line 05434␍␊Line 05435␍␊...'
   But was:  '...5420␍␊Line 05421␍␊Line 05422␍␊Line 05423␍␊Line 05424␍␊Line 05425␍␊Line 05426␍␊Line 05427␍␊Line 05428␍␊Line 05429␍␊Line 05430␍␊Line 05431␍␊Line 05432␍␊Line 05433␍␊Line 05434␍␊Line 05435␍␊...'
              --------------------------------------------------------------------------------------------------------------------------------------------------------------^
   at Get-Content $actualPath -Raw | Should -BeExactly $expected, C:\Code\Pester-BeExactlyV6.Tests.ps1:19
  [-] V6 Syntax: Should-BeString 26ms
   Expected strings to be the same, but they were different.
   String lengths are both 120000.
   Strings differ at index 65189.
   Expected: 'Line 00001␍␊Line 00002␍␊Line 00003␍␊Line 00004␍␊Line 00005␍␊Line 00006␍␊Line 00007␍␊Line 00008␍␊Line 00009␍␊Line 00010␍␊Line 00011␍␊Line 00012␍␊Line 00013␍␊Line 00014␍␊Line 00015␍␊Line 00016␍␊Line 00017␍␊Line 00018␍␊Line 00019␍␊Line 00020␍␊Line 00021␍␊Line 00022␍␊Line 00023␍␊Line 00024␍␊Line 00025␍␊Line 00026␍␊Line 00027␍␊Line 00028␍␊Line 00029␍␊Line 00030␍␊Line 00031␍␊Line 00032␍␊Line 00033␍␊Line 00034␍␊Line 00035␍␊Line 00036␍␊Line 00037␍␊Line 00038␍␊Line 00039␍␊Line 00040␍␊Line 00041␍␊Line 00042␍␊Line 00043␍␊Line 00044␍␊Line 00045␍␊Line 00046␍␊Line 00047␍␊Line [Cuttet to long for GitHub]05432␍␊Line 05433␍␊Line 05434␍␊Line 05435␍␊Line 05436␍␊Line 05437␍␊Line 05438␍␊Line 05439␍␊Line 05440␍␊Line 05441␍␊Line 05442␍␊Line 05443␍␊Line 05444␍␊Line 05445␍␊Line 05446␍␊Line 05447␍␊Line 05448␍␊Line 05449␍␊Line 05450␍␊Line 05451␍␊Line 05452␍␊Line 05453␍␊Line 05454␍␊Line 05455␍␊Line 05456␍␊Line 05457␍␊Line 05458␍␊Line 05459␍␊Line 05460␍␊Line 05461␍␊Line 05462␍␊Line 05463␍␊Line 05464␍␊Line 05465␍␊Line 05466␍␊Line 05467␍␊Line 05468␍␊Line 05469␍␊Line 05470␍␊Line 05471␍␊Line 05472␍␊Line 05473␍␊Line 05474␍␊Line 05475␍␊Line 05476␍␊Line 05477␍␊Line 05478␍␊Line 05479␍␊Line 05480␍␊Line 05481␍␊Line 05482␍␊Line 05483␍␊Line 05484␍␊Line 05485␍␊Line 05486␍␊Line 05487␍␊Line 05488␍␊Line 05489␍␊Line 05490␍␊Line 05491␍␊Line 05492␍␊Line 05493␍␊Line 05494␍␊Line 05495␍␊Line 05496␍␊Line 05497␍␊Line 05498␍␊Line 05499␍␊Line 05500␍␊Line 05501␍␊Line 05502␍␊Line 05503␍␊Line 05504␍␊Line 05505␍␊Line 05506␍␊Line 05507␍␊Line 05508␍␊Line 05509␍␊Line 05510␍␊Line 05511␍␊Line 05512␍␊Line 05513␍␊Line 05514␍␊Line 05515␍␊Line 05516␍␊Line 05517␍␊Line 05518␍␊Line 05519␍␊Line 05520␍␊Line 05521␍␊Line 05522␍␊Line 05523␍␊Line 05524␍␊Line 05525␍␊Line 05526␍␊Line 05527␍␊Line 05528␍␊Line 05529␍␊Line 05530␍␊Line 05531␍␊Line 05532␍␊Line 05533␍␊Line 05534␍␊Line 05535␍␊Line 05536␍␊Line 05537␍␊Line 05538␍␊Line 05539␍␊Line 05540␍␊Line 05541␍␊Line 05542␍␊Line 05543␍␊Line 05544␍␊Line 05545␍␊Line 05546␍␊Line 05547␍␊Line 05548␍␊Line 05549␍␊Line 05550␍␊Line 05551␍␊Line 05552␍␊Line 05553␍␊Line 05554␍␊Line 05555␍␊Line 05556␍␊Line 05557␍␊Line 05558␍␊Line 05559␍␊Line 05560␍␊Line 05561␍␊Line 05562␍␊Line 05563␍␊Line 05564␍␊Line 05565␍␊Line 05566␍␊Line 05567␍␊Line 05568␍␊Line 05569␍␊Line 05570␍␊Line 05571␍␊Line 05572␍␊Line 05573␍␊Line 05574␍␊Line 05575␍␊Line 05576␍␊Line 05577␍␊Line 05578␍␊Line 05579␍␊Line 05580␍␊Line 05581␍␊Line 05582␍␊Line 05583␍␊Line 05584␍␊Line 05585␍␊Line 05586␍␊Line 05587␍␊Line 05588␍␊Line 05589␍␊Line 05590␍␊Line 05591␍␊Line 05592␍␊Line 05593␍␊Line 05594␍␊Line 05595␍␊Line 05596␍␊Line 05597␍␊Line 05598␍␊Line 05599␍␊Line 05600␍␊Line 05601␍␊Line 05602␍␊Line 05603␍␊Line 05604␍␊Line 05605␍␊Line 05606␍␊Line 05607␍␊Line 05608␍␊Line 05609␍␊Line 05610␍␊Line 05611␍␊Line 05612␍␊Line 05613␍␊Line 05614␍␊Line 05615␍␊Line 05616␍␊Line 05617␍␊Line 05618␍␊Line 05619␍␊Line 05620␍␊Line 05621␍␊Line 05622␍␊Line 05623␍␊Line 05624␍␊Line 05625␍␊Line 05626␍␊Line 05627␍␊Line 05628␍␊Line 05629␍␊Line 05630␍␊Line 05631␍␊Line 05632␍␊Line 05633␍␊Line 05634␍␊Line 05635␍␊Line 05636␍␊Line 05637␍␊Line 05638␍␊Line 05639␍␊Line 05640␍␊Line 05641␍␊Line 05642␍␊Line 05643␍␊Line 05644␍␊Line 05645␍␊Line 05646␍␊Line 05647␍␊Line 05648␍␊Line 05649␍␊Line 05650␍␊Line 05651␍␊Line 05652␍␊Line 05653␍␊Line 05654␍␊Line 05655␍␊Line 05656␍␊Line 05657␍␊Line 05658␍␊Line 05659␍␊Line 05660␍␊Line 05661␍␊Line 05662␍␊Line 05663␍␊Line 05664␍␊Line 05665␍␊Line 05666␍␊Line 05667␍␊Line 05668␍␊Line 05669␍␊Line 05670␍␊Line 05671␍␊Line 05672␍␊Line 05673␍␊Line 05674␍␊Line 05675␍␊Line 05676␍␊Line 05677␍␊Line 05678␍␊Line 05679␍␊Line 05680␍␊Line 05681␍␊Line 05682␍␊Line 05683␍␊Line 05684␍␊Line 05685␍␊Line 05686␍␊Line 05687␍␊Line 05688␍␊Line 05689␍␊Line 05690␍␊Line 05691␍␊Line 05692␍␊Line 05693␍␊Line 05694␍␊Line 05695␍␊Line 05696␍␊Line 05697␍␊Line 05698␍␊Line 05699␍␊Line 05700␍␊Line 05701␍␊Line 05702␍␊Line 05703␍␊Line 05704␍␊Line 05705␍␊Line 05706␍␊Line 05707␍␊Line 05708␍␊Line 05709␍␊Line 05710␍␊Line 05711␍␊Line 05712␍␊Line 05713␍␊Line 05714␍␊Line 05715␍␊Line 05716␍␊Line 05717␍␊Line 05718␍␊Line 05719␍␊Line 05720␍␊Line 05721␍␊Line 05722␍␊Line 05723␍␊Line 05724␍␊Line 05725␍␊Line 05726␍␊Line 05727␍␊Line 05728␍␊Line 05729␍␊Line 05730␍␊Line 05731␍␊Line 05732␍␊Line 05733␍␊Line 05734␍␊Line 05735␍␊Line 05736␍␊Line 05737␍␊Line 05738␍␊Line 05739␍␊Line 05740␍␊Line 05741␍␊Line 05742␍␊Line 05743␍␊Line 05744␍␊Line 05745␍␊Line 05746␍␊Line 05747␍␊Line 05748␍␊Line 05749␍␊Line 05750␍␊Line 05751␍␊Line 05752␍␊Line 05753␍␊Line 05754␍␊Line 05755␍␊Line 05756␍␊Line 05757␍␊Line 05758␍␊Line 05759␍␊Line 05760␍␊Line 05761␍␊Line 05762␍␊Line 05763␍␊Line 05764␍␊Line 05765␍␊Line 05766␍␊Line 05767␍␊Line 05768␍␊Line 05769␍␊Line 05770␍␊Line 05771␍␊Line 05772␍␊Line 05773␍␊Line 05774␍␊Line 05775␍␊Line 05776␍␊Line 05777␍␊Line 05778␍␊Line 05779␍␊Line 05780␍␊Line 05781␍␊Line 05782␍␊Line 05783␍␊Line 05784␍␊Line 05785␍␊Line 05786␍␊Line 05787␍␊Line 05788␍␊Line 05789␍␊Line 05790␍␊Line 05791␍␊Line 05792␍␊Line 05793␍␊Line 05794␍␊Line 05795␍␊Line 05796␍␊Line 05797␍␊Line 05798␍␊Line 05799␍␊Line 05800␍␊Line 05801␍␊Line 05802␍␊Line 05803␍␊Line 05804␍␊Line 05805␍␊Line 05806␍␊Line 05807␍␊Line 05808␍␊Line 05809␍␊Line 05810␍␊Line 05811␍␊Line 05812␍␊Line 05813␍␊Line 05814␍␊Line 05815␍␊Line 05816␍␊Line 05817␍␊Line 05818␍␊Line 05819␍␊Line 05820␍␊Line 05821␍␊Line 05822␍␊Line 05823␍␊Line 05824␍␊Line 05825␍␊Line 05826␍␊Line 05827␍␊Line 05828␍␊Line 05829␍␊Line 05830␍␊Line 05831␍␊Line 05832␍␊Line 05833␍␊Line 05834␍␊Line 05835␍␊Line 05836␍␊Line 05837␍␊Line 05838␍␊Line 05839␍␊Line 05840␍␊Line 05841␍␊Line 05842␍␊Line 05843␍␊Line 05844␍␊Line 05845␍␊Line 05846␍␊Line 05847␍␊Line 05848␍␊Line 05849␍␊Line 05850␍␊Line 05851␍␊Line 05852␍␊Line 05853␍␊Line 05854␍␊Line 05855␍␊Line 05856␍␊Line 05857␍␊Line 05858␍␊Line 05859␍␊Line 05860␍␊Line 05861␍␊Line 05862␍␊Line 05863␍␊Line 05864␍␊Line 05865␍␊Line 05866␍␊Line 05867␍␊Line 05868␍␊Line 05869␍␊Line 05870␍␊Line 05871␍␊Line 05872␍␊Line 05873␍␊Line 05874␍␊Line 05875␍␊Line 05876␍␊Line 05877␍␊Line 05878␍␊Line 05879␍␊Line 05880␍␊Line 05881␍␊Line 05882␍␊Line 05883␍␊Line 05884␍␊Line 05885␍␊Line 05886␍␊Line 05887␍␊Line 05888␍␊Line 05889␍␊Line 05890␍␊Line 05891␍␊Line 05892␍␊Line 05893␍␊Line 05894␍␊Line 05895␍␊Line 05896␍␊Line 05897␍␊Line 05898␍␊Line 05899␍␊Line 05900␍␊Line 05901␍␊Line 05902␍␊Line 05903␍␊Line 05904␍␊Line 05905␍␊Line 05906␍␊Line 05907␍␊Line 05908␍␊Line 05909␍␊Line 05910␍␊Line 05911␍␊Line 05912␍␊Line 05913␍␊Line 05914␍␊Line 05915␍␊Line 05916␍␊Line 05917␍␊Line 05918␍␊Line 05919␍␊Line 05920␍␊Line 05921␍␊Line 05922␍␊Line 05923␍␊Line 05924␍␊Line 05925␍␊Line 05926␍␊Line 05927␍␊Line 05928␍␊Line 05929␍␊Line 05930␍␊Line 05931␍␊Line 05932␍␊Line 05933␍␊Line 05934␍␊Line 05935␍␊Line 05936␍␊Line 05937␍␊Line 05938␍␊Line 05939␍␊Line 05940␍␊Line 05941␍␊Line 05942␍␊Line 05943␍␊Line 05944␍␊Line 05945␍␊Line 05946␍␊Line 05947␍␊Line 05948␍␊Line 05949␍␊Line 05950␍␊Line 05951␍␊Line 05952␍␊Line 05953␍␊Line 05954␍␊Line 05955␍␊Line 05956␍␊Line 05957␍␊Line 05958␍␊Line 05959␍␊Line 05960␍␊Line 05961␍␊Line 05962␍␊Line 05963␍␊Line 05964␍␊Line 05965␍␊Line 05966␍␊Line 05967␍␊Line 05968␍␊Line 05969␍␊Line 05970␍␊Line 05971␍␊Line 05972␍␊Line 05973␍␊Line 05974␍␊Line 05975␍␊Line 05976␍␊Line 05977␍␊Line 05978␍␊Line 05979␍␊Line 05980␍␊Line 05981␍␊Line 05982␍␊Line 05983␍␊Line 05984␍␊Line 05985␍␊Line 05986␍␊Line 05987␍␊Line 05988␍␊Line 05989␍␊Line 05990␍␊Line 05991␍␊Line 05992␍␊Line 05993␍␊Line 05994␍␊Line 05995␍␊Line 05996␍␊Line 05997␍␊Line 05998␍␊Line 05999␍␊Line 06000␍␊Line 06001␍␊Line 06002␍␊Line 06003␍␊Line 06004␍␊Line 06005␍␊Line 06006␍␊Line 06007␍␊Line 06008␍␊Line 06009␍␊Line 06010␍␊Line 06011␍␊Line 06012␍␊Line 06013␍␊Line 06014␍␊Line 06015␍␊Line 06016␍␊Line 06017␍␊Line 06018␍␊Line 06019␍␊Line 06020␍␊Line 06021␍␊Line 06022␍␊Line 06023␍␊Line 06024␍␊Line 06025␍␊Line 06026␍␊Line 06027␍␊Line 06028␍␊Line 06029␍␊Line 06030␍␊Line 06031␍␊Line 06032␍␊Line 06033␍␊Line 06034␍␊Line 06035␍␊Line 06036␍␊Line 06037␍␊Line 06038␍␊Line 06039␍␊Line 06040␍␊Line 06041␍␊Line 06042␍␊Line 06043␍␊Line 06044␍␊Line 06045␍␊Line 06046␍␊Line 06047␍␊Line 06048␍␊Line 06049␍␊Line 06050␍␊Line 06051␍␊Line 06052␍␊Line 06053␍␊Line 06054␍␊Line 06055␍␊Line 06056␍␊Line 06057␍␊Line 06058␍␊Line 06059␍␊Line 06060␍␊Line 06061␍␊Line 06062␍␊Line 06063␍␊Line 06064␍␊Line 06065␍␊Line 06066␍␊Line 06067␍␊Line 06068␍␊Line 06069␍␊Line 06070␍␊Line 06071␍␊Line 06072␍␊Line 06073␍␊Line 06074␍␊Line 06075␍␊Line 06076␍␊Line 06077␍␊Line 06078␍␊Line 06079␍␊Line 06080␍␊Line 06081␍␊Line 06082␍␊Line 06083␍␊Line 06084␍␊Line 06085␍␊Line 06086␍␊Line 06087␍␊Line 06088␍␊Line 06089␍␊Line 06090␍␊Line 06091␍␊Line 06092␍␊Line 06093␍␊Line 06094␍␊Line 06095␍␊Line 06096␍␊Line 06097␍␊Line 06098␍␊Line 06099␍␊Line 06100␍␊Line 06101␍␊Line 06102␍␊Line 06103␍␊Line 06104␍␊Line 06105␍␊Line 06106␍␊Line 06107␍␊Line 06108␍␊Line 06109␍␊Line 06110␍␊Line 06111␍␊Line 06112␍␊Line 06113␍␊Line 06114␍␊Line 06115␍␊Line 06116␍␊Line 06117␍␊Line 06118␍␊Line 06119␍␊Line 06120␍␊Line 06121␍␊Line 06122␍␊Line 06123␍␊Line 06124␍␊Line 06125␍␊Line 06126␍␊Line 06127␍␊Line 06128␍␊Line 06129␍␊Line 06130␍␊Line 06131␍␊Line 06132␍␊Line 06133␍␊Line 06134␍␊Line 06135␍␊Line 06136␍␊Line 06137␍␊Line 06138␍␊Line 06139␍␊Line 06140␍␊Line 06141␍␊Line 06142␍␊Line 06143␍␊Line 06144␍␊Line 06145␍␊Line 06146␍␊Line 06147␍␊Line 06148␍␊Line 06149␍␊Line 06150␍␊Line 06151␍␊Line 06152␍␊Line 06153␍␊Line 06154␍␊Line 06155␍␊Line 06156␍␊Line 06157␍␊Line 06158␍␊Line 06159␍␊Line 06160␍␊Line 06161␍␊Line 06162␍␊Line 06163␍␊Line 06164␍␊Line 06165␍␊Line 06166␍␊Line 06167␍␊Line 06168␍␊Line 06169␍␊Line 06170␍␊Line 06171␍␊Line 06172␍␊Line 06173␍␊Line 06174␍␊Line 06175␍␊Line 06176␍␊Line 06177␍␊Line 06178␍␊Line 06179␍␊Line 06180␍␊Line 06181␍␊Line 06182␍␊Line 06183␍␊Line 06184␍␊Line 06185␍␊Line 06186␍␊Line 06187␍␊Line 06188␍␊Line 06189␍␊Line 06190␍␊Line 06191␍␊Line 06192␍␊Line 06193␍␊Line 06194␍␊Line 06195␍␊Line 06196␍␊Line 06197␍␊Line 06198␍␊Line 06199␍␊Line 06200␍␊Line 06201␍␊Line 06202␍␊Line 06203␍␊Line 06204␍␊Line 06205␍␊Line 06206␍␊Line 06207␍␊Line 06208␍␊Line 06209␍␊Line 06210␍␊Line 06211␍␊Line 06212␍␊Line 06213␍␊Line 06214␍␊Line 06215␍␊Line 06216␍␊Line 06217␍␊Line 06218␍␊Line 06219␍␊Line 06220␍␊Line 06221␍␊Line 06222␍␊Line 06223␍␊Line 06224␍␊Line 06225␍␊Line 06226␍␊Line 06227␍␊Line 06228␍␊Line 06229␍␊Line 06230␍␊Line 06231␍␊Line 06232␍␊Line 06233␍␊Line 06234␍␊Line 06235␍␊Line 06236␍␊Line 06237␍␊Line 06238␍␊Line 06239␍␊Line 06240␍␊Line 06241␍␊Line 06242␍␊Line 06243␍␊Line 06244␍␊Line 06245␍␊Line 06246␍␊Line 06247␍␊Line 06248␍␊Line 06249␍␊Line 06250␍␊Line 06251␍␊Line 06252␍␊Line 06253␍␊Line 06254␍␊Line 06255␍␊Line 06256␍␊Line 06257␍␊Line 06258␍␊Line 06259␍␊Line 06260␍␊Line 06261␍␊Line 06262␍␊Line 06263␍␊Line 06264␍␊Line 06265␍␊Line 06266␍␊Line 06267␍␊Line 06268␍␊Line 06269␍␊Line 06270␍␊Line 06271␍␊Line 06272␍␊Line 06273␍␊Line 06274␍␊Line 06275␍␊Line 06276␍␊Line 06277␍␊Line 06278␍␊Line 06279␍␊Line 06280␍␊Line 06281␍␊Line 06282␍␊Line 06283␍␊[Cuttet to long for GitHub]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------^
   at $actual | Should-BeString $expected -CaseSensitive, C:\Code\Pester-BeExactlyV6.Tests.ps1:25
Tests completed in 206ms
Tests Passed: 0, Failed: 2, Skipped: 0, Inconclusive: 0, NotRun: 0

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions