Skip to content

Instantly share code, notes, and snippets.

@cowboyd
Last active May 6, 2022 12:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cowboyd/204fe1947fe9868a2d18a2fe1fb2cfd9 to your computer and use it in GitHub Desktop.
Save cowboyd/204fe1947fe9868a2d18a2fe1fb2cfd9 to your computer and use it in GitHub Desktop.
Contains pass / fail terminal output. Both raw, and rendered to html

In order to generate html from terminal output, you can use this tool https://github.com/buildkite/terminal-to-html to do it in two steps.

Capture

First, run your command, and save it to a raw output file.

$ mycommand > output.term

Jest

Jest output is really fiddly. You need to turn CI mode on, and --no-watch flag, and force --color in order to make sure you get the ANSI escape codes. Also, Jest outputs the test summary to stderr, not stdout:

$ CI=true jest --no-watch --color 2> output.term

Render

Now that we have the terminal output, we can convert it to html

$ cat output.term | terminal-to-html --preview > output.term.html
 FAIL  ]8;;file:///Users/cowboyd/Code/@backstage/backstage-integration-testing-example/packages/tests/src/catalog.test.tssrc/catalog.test.ts]8;; (24.271 s)
catalog ingestion
✓ can connect to the catalog (5336 ms)
✓ ingests the artist lookup component (5607 ms)
✕ ingests the example user from ldap into the catalog (10012 ms)
 ● catalog ingestion › ingests the example user from ldap into the catalog
expect(received).toMatchObject(expected)
- Expected - 2
+ Received + 1
 Object {
 "spec": Object {
 "profile": Object {
- "displayName": "Charles Lowell",
+ "displayName": "cowboyd",
 "email": "cowboyd@example.com",
- "picture": "https://avatars.dicebear.com/api/open-peeps/cowboyd.svg",
 },
 },
 }

   52 | }
   53 | }
 > 54 | }).toMatchObject({
   | ^
   55 | spec: {
   56 | profile: {
   57 | email: 'cowboyd@example.com',

 at Object.<anonymous> (catalog.test.ts:54:8)
 at ../../../node_modules/@effection/core/src/controller/iterator-controller.ts:61:29
 at ../../../node_modules/@effection/core/src/controller/iterator-controller.ts:36:16
 at Object.run (../../../node_modules/@effection/core/src/run-loop.ts:24:15)
 at resume (../../../node_modules/@effection/core/src/controller/iterator-controller.ts:33:21)
 at trap (../../../node_modules/@effection/core/src/controller/iterator-controller.ts:61:7)
 at run (../../../node_modules/@effection/core/src/future.ts:104:11)
 at Object.run (../../../node_modules/@effection/core/src/run-loop.ts:24:15)
 at produce (../../../node_modules/@effection/core/src/future.ts:115:15)
 at finalize (../../../node_modules/@effection/core/src/task.ts:514:5)
 at ../../../node_modules/@effection/core/src/task.ts:462:5
 at run (../../../node_modules/@effection/core/src/future.ts:104:11)
 at Object.run (../../../node_modules/@effection/core/src/run-loop.ts:24:15)
 at produce (../../../node_modules/@effection/core/src/future.ts:115:15)
 at Promise.race.then.produce.state (../../../node_modules/@effection/core/src/controller/promise-controller.ts:11:9)
 at runMicrotasks (<anonymous>)
 ● catalog ingestion › ingests the example user from ldap into the catalog
expect(received).toMatchObject(expected)
- Expected - 2
+ Received + 1
 Object {
 "spec": Object {
 "profile": Object {
- "displayName": "Charles Lowell",
+ "displayName": "cowboyd",
 "email": "cowboyd@example.com",
- "picture": "https://avatars.dicebear.com/api/open-peeps/cowboyd.svg",
 },
 },
 }

   52 | }
   53 | }
 > 54 | }).toMatchObject({
   | ^
   55 | spec: {
   56 | profile: {
   57 | email: 'cowboyd@example.com',

 at Object.<anonymous> (catalog.test.ts:54:8)
 at ../../../node_modules/@effection/core/src/controller/iterator-controller.ts:61:29
 at ../../../node_modules/@effection/core/src/controller/iterator-controller.ts:36:16
 at Object.run (../../../node_modules/@effection/core/src/run-loop.ts:24:15)
 at resume (../../../node_modules/@effection/core/src/controller/iterator-controller.ts:33:21)
 at trap (../../../node_modules/@effection/core/src/controller/iterator-controller.ts:61:7)
 at run (../../../node_modules/@effection/core/src/future.ts:104:11)
 at Object.run (../../../node_modules/@effection/core/src/run-loop.ts:24:15)
 at produce (../../../node_modules/@effection/core/src/future.ts:115:15)
 at finalize (../../../node_modules/@effection/core/src/task.ts:514:5)
 at ../../../node_modules/@effection/core/src/task.ts:462:5
 at run (../../../node_modules/@effection/core/src/future.ts:104:11)
 at Object.run (../../../node_modules/@effection/core/src/run-loop.ts:24:15)
 at produce (../../../node_modules/@effection/core/src/future.ts:115:15)
 at Promise.race.then.produce.state (../../../node_modules/@effection/core/src/controller/promise-controller.ts:11:9)
 at runMicrotasks (<anonymous>)
Test Suites: 1 failed, 1 total
Tests: 1 failed, 2 passed, 3 total
Snapshots: 0 total
Time: 24.608 s, estimated 25 s
Ran all test suites.
error Command failed with exit code 1.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>terminal-to-html Preview</title>
<style>.term-container {
background: #171717;
border-radius: 5px;
color: white;
word-break: break-word;
overflow-wrap: break-word;
font-family: Monaco, courier;
font-size: 12px;
line-height: 20px;
padding: 14px 18px;
white-space: pre-wrap;
}
.term-fg1 { } /* don't bold beccause it looks weird */
.term-fg3 { font-style: italic; } /* italic */
.term-fg4 { text-decoration: underline; } /* underline */
.term-fg9 { text-decoration: line-through; } /* crossed-out */
.term-fg30 { color: #666; } /* black (but we can't use black, so a diff color) */
.term-fg31 { color: #e10c02; } /* red */
.term-fg32 { color: #99ff5e; } /* green */
.term-fg33 { color: #c6c502; } /* yellow */
.term-fg34 { color: #8db7e0; } /* blue */
.term-fg35 { color: #f271fb; } /* magenta */
.term-fg36 { color: #00cdd9; } /* cyan */
/* high intense colors */
.term-fgi1 { color: #5ef765; }
.term-fgi90 { color: #838887; } /* grey */
/* background colors */
.term-bg42 { background: #99ff5f; }
.term-bg40 { background: #676767; }
/* custom foreground/background combos for readability */
.term-fg31.term-bg40 { color: #F8A39F; }
/* xterm colors */
.term-fgx16 { color: #000000; }
.term-fgx17 { color: #00005f; }
.term-fgx18 { color: #000087; }
.term-fgx19 { color: #0000af; }
.term-fgx20 { color: #0000d7; }
.term-fgx21 { color: #0000ff; }
.term-fgx22 { color: #005f00; }
.term-fgx23 { color: #005f5f; }
.term-fgx24 { color: #005f87; }
.term-fgx25 { color: #005faf; }
.term-fgx26 { color: #005fd7; }
.term-fgx27 { color: #005fff; }
.term-fgx28 { color: #008700; }
.term-fgx29 { color: #00875f; }
.term-fgx30 { color: #008787; }
.term-fgx31 { color: #0087af; }
.term-fgx32 { color: #0087d7; }
.term-fgx33 { color: #0087ff; }
.term-fgx34 { color: #00af00; }
.term-fgx35 { color: #00af5f; }
.term-fgx36 { color: #00af87; }
.term-fgx37 { color: #00afaf; }
.term-fgx38 { color: #00afd7; }
.term-fgx39 { color: #00afff; }
.term-fgx40 { color: #00d700; }
.term-fgx41 { color: #00d75f; }
.term-fgx42 { color: #00d787; }
.term-fgx43 { color: #00d7af; }
.term-fgx44 { color: #00d7d7; }
.term-fgx45 { color: #00d7ff; }
.term-fgx46 { color: #00ff00; }
.term-fgx47 { color: #00ff5f; }
.term-fgx48 { color: #00ff87; }
.term-fgx49 { color: #00ffaf; }
.term-fgx50 { color: #00ffd7; }
.term-fgx51 { color: #00ffff; }
.term-fgx52 { color: #5f0000; }
.term-fgx53 { color: #5f005f; }
.term-fgx54 { color: #5f0087; }
.term-fgx55 { color: #5f00af; }
.term-fgx56 { color: #5f00d7; }
.term-fgx57 { color: #5f00ff; }
.term-fgx58 { color: #5f5f00; }
.term-fgx59 { color: #5f5f5f; }
.term-fgx60 { color: #5f5f87; }
.term-fgx61 { color: #5f5faf; }
.term-fgx62 { color: #5f5fd7; }
.term-fgx63 { color: #5f5fff; }
.term-fgx64 { color: #5f8700; }
.term-fgx65 { color: #5f875f; }
.term-fgx66 { color: #5f8787; }
.term-fgx67 { color: #5f87af; }
.term-fgx68 { color: #5f87d7; }
.term-fgx69 { color: #5f87ff; }
.term-fgx70 { color: #5faf00; }
.term-fgx71 { color: #5faf5f; }
.term-fgx72 { color: #5faf87; }
.term-fgx73 { color: #5fafaf; }
.term-fgx74 { color: #5fafd7; }
.term-fgx75 { color: #5fafff; }
.term-fgx76 { color: #5fd700; }
.term-fgx77 { color: #5fd75f; }
.term-fgx78 { color: #5fd787; }
.term-fgx79 { color: #5fd7af; }
.term-fgx80 { color: #5fd7d7; }
.term-fgx81 { color: #5fd7ff; }
.term-fgx82 { color: #5fff00; }
.term-fgx83 { color: #5fff5f; }
.term-fgx84 { color: #5fff87; }
.term-fgx85 { color: #5fffaf; }
.term-fgx86 { color: #5fffd7; }
.term-fgx87 { color: #5fffff; }
.term-fgx88 { color: #870000; }
.term-fgx89 { color: #87005f; }
.term-fgx90 { color: #870087; }
.term-fgx91 { color: #8700af; }
.term-fgx92 { color: #8700d7; }
.term-fgx93 { color: #8700ff; }
.term-fgx94 { color: #875f00; }
.term-fgx95 { color: #875f5f; }
.term-fgx96 { color: #875f87; }
.term-fgx97 { color: #875faf; }
.term-fgx98 { color: #875fd7; }
.term-fgx99 { color: #875fff; }
.term-fgx100 { color: #878700; }
.term-fgx101 { color: #87875f; }
.term-fgx102 { color: #878787; }
.term-fgx103 { color: #8787af; }
.term-fgx104 { color: #8787d7; }
.term-fgx105 { color: #8787ff; }
.term-fgx106 { color: #87af00; }
.term-fgx107 { color: #87af5f; }
.term-fgx108 { color: #87af87; }
.term-fgx109 { color: #87afaf; }
.term-fgx110 { color: #87afd7; }
.term-fgx111 { color: #87afff; }
.term-fgx112 { color: #87d700; }
.term-fgx113 { color: #87d75f; }
.term-fgx114 { color: #87d787; }
.term-fgx115 { color: #87d7af; }
.term-fgx116 { color: #87d7d7; }
.term-fgx117 { color: #87d7ff; }
.term-fgx118 { color: #87ff00; }
.term-fgx119 { color: #87ff5f; }
.term-fgx120 { color: #87ff87; }
.term-fgx121 { color: #87ffaf; }
.term-fgx122 { color: #87ffd7; }
.term-fgx123 { color: #87ffff; }
.term-fgx124 { color: #af0000; }
.term-fgx125 { color: #af005f; }
.term-fgx126 { color: #af0087; }
.term-fgx127 { color: #af00af; }
.term-fgx128 { color: #af00d7; }
.term-fgx129 { color: #af00ff; }
.term-fgx130 { color: #af5f00; }
.term-fgx131 { color: #af5f5f; }
.term-fgx132 { color: #af5f87; }
.term-fgx133 { color: #af5faf; }
.term-fgx134 { color: #af5fd7; }
.term-fgx135 { color: #af5fff; }
.term-fgx136 { color: #af8700; }
.term-fgx137 { color: #af875f; }
.term-fgx138 { color: #af8787; }
.term-fgx139 { color: #af87af; }
.term-fgx140 { color: #af87d7; }
.term-fgx141 { color: #af87ff; }
.term-fgx142 { color: #afaf00; }
.term-fgx143 { color: #afaf5f; }
.term-fgx144 { color: #afaf87; }
.term-fgx145 { color: #afafaf; }
.term-fgx146 { color: #afafd7; }
.term-fgx147 { color: #afafff; }
.term-fgx148 { color: #afd700; }
.term-fgx149 { color: #afd75f; }
.term-fgx150 { color: #afd787; }
.term-fgx151 { color: #afd7af; }
.term-fgx152 { color: #afd7d7; }
.term-fgx153 { color: #afd7ff; }
.term-fgx154 { color: #afff00; }
.term-fgx155 { color: #afff5f; }
.term-fgx156 { color: #afff87; }
.term-fgx157 { color: #afffaf; }
.term-fgx158 { color: #afffd7; }
.term-fgx159 { color: #afffff; }
.term-fgx160 { color: #d70000; }
.term-fgx161 { color: #d7005f; }
.term-fgx162 { color: #d70087; }
.term-fgx163 { color: #d700af; }
.term-fgx164 { color: #d700d7; }
.term-fgx165 { color: #d700ff; }
.term-fgx166 { color: #d75f00; }
.term-fgx167 { color: #d75f5f; }
.term-fgx168 { color: #d75f87; }
.term-fgx169 { color: #d75faf; }
.term-fgx170 { color: #d75fd7; }
.term-fgx171 { color: #d75fff; }
.term-fgx172 { color: #d78700; }
.term-fgx173 { color: #d7875f; }
.term-fgx174 { color: #d78787; }
.term-fgx175 { color: #d787af; }
.term-fgx176 { color: #d787d7; }
.term-fgx177 { color: #d787ff; }
.term-fgx178 { color: #d7af00; }
.term-fgx179 { color: #d7af5f; }
.term-fgx180 { color: #d7af87; }
.term-fgx181 { color: #d7afaf; }
.term-fgx182 { color: #d7afd7; }
.term-fgx183 { color: #d7afff; }
.term-fgx184 { color: #d7d700; }
.term-fgx185 { color: #d7d75f; }
.term-fgx186 { color: #d7d787; }
.term-fgx187 { color: #d7d7af; }
.term-fgx188 { color: #d7d7d7; }
.term-fgx189 { color: #d7d7ff; }
.term-fgx190 { color: #d7ff00; }
.term-fgx191 { color: #d7ff5f; }
.term-fgx192 { color: #d7ff87; }
.term-fgx193 { color: #d7ffaf; }
.term-fgx194 { color: #d7ffd7; }
.term-fgx195 { color: #d7ffff; }
.term-fgx196 { color: #ff0000; }
.term-fgx197 { color: #ff005f; }
.term-fgx198 { color: #ff0087; }
.term-fgx199 { color: #ff00af; }
.term-fgx200 { color: #ff00d7; }
.term-fgx201 { color: #ff00ff; }
.term-fgx202 { color: #ff5f00; }
.term-fgx203 { color: #ff5f5f; }
.term-fgx204 { color: #ff5f87; }
.term-fgx205 { color: #ff5faf; }
.term-fgx206 { color: #ff5fd7; }
.term-fgx207 { color: #ff5fff; }
.term-fgx208 { color: #ff8700; }
.term-fgx209 { color: #ff875f; }
.term-fgx210 { color: #ff8787; }
.term-fgx211 { color: #ff87af; }
.term-fgx212 { color: #ff87d7; }
.term-fgx213 { color: #ff87ff; }
.term-fgx214 { color: #ffaf00; }
.term-fgx215 { color: #ffaf5f; }
.term-fgx216 { color: #ffaf87; }
.term-fgx217 { color: #ffafaf; }
.term-fgx218 { color: #ffafd7; }
.term-fgx219 { color: #ffafff; }
.term-fgx220 { color: #ffd700; }
.term-fgx221 { color: #ffd75f; }
.term-fgx222 { color: #ffd787; }
.term-fgx223 { color: #ffd7af; }
.term-fgx224 { color: #ffd7d7; }
.term-fgx225 { color: #ffd7ff; }
.term-fgx226 { color: #ffff00; }
.term-fgx227 { color: #ffff5f; }
.term-fgx228 { color: #ffff87; }
.term-fgx229 { color: #ffffaf; }
.term-fgx230 { color: #ffffd7; }
.term-fgx231 { color: #ffffff; }
.term-fgx232 { color: #080808; }
.term-fgx233 { color: #121212; }
.term-fgx234 { color: #1c1c1c; }
.term-fgx235 { color: #262626; }
.term-fgx236 { color: #303030; }
.term-fgx237 { color: #3a3a3a; }
.term-fgx238 { color: #444444; }
.term-fgx239 { color: #4e4e4e; }
.term-fgx240 { color: #585858; }
.term-fgx241 { color: #626262; }
.term-fgx242 { color: #6c6c6c; }
.term-fgx243 { color: #767676; }
.term-fgx244 { color: #808080; }
.term-fgx245 { color: #8a8a8a; }
.term-fgx246 { color: #949494; }
.term-fgx247 { color: #9e9e9e; }
.term-fgx248 { color: #a8a8a8; }
.term-fgx249 { color: #b2b2b2; }
.term-fgx250 { color: #bcbcbc; }
.term-fgx251 { color: #c6c6c6; }
.term-fgx252 { color: #d0d0d0; }
.term-fgx253 { color: #dadada; }
.term-fgx254 { color: #e4e4e4; }
.term-fgx255 { color: #eeeeee; }
</style>
</head>
<body>
<div class="term-container"><span class="term-fg31 term-fg1"> FAIL </span> <span class="term-fg2">src&#47;</span><span class="term-fg1">catalog.test.ts</span> (<span class="term-bg41 term-fg1">24.271 s</span>)
catalog ingestion
<span class="term-fg32">✓</span> <span class="term-fg2">can connect to the catalog (5336 ms)</span>
<span class="term-fg32">✓</span> <span class="term-fg2">ingests the artist lookup component (5607 ms)</span>
<span class="term-fg31">✕</span> <span class="term-fg2">ingests the example user from ldap into the catalog (10012 ms)</span>
&nbsp;
<span class="term-fg31 term-fg1"> ● catalog ingestion › ingests the example user from ldap into the catalog</span>
&nbsp;
<span class="term-fg2">expect(</span><span class="term-fg31">received</span><span class="term-fg2">).</span>toMatchObject<span class="term-fg2">(</span><span class="term-fg32">expected</span><span class="term-fg2">)</span>
&nbsp;
<span class="term-fg32">- Expected - 2</span>
<span class="term-fg31">+ Received + 1</span>
&nbsp;
<span class="term-fg2"> Object {</span>
<span class="term-fg2"> &quot;spec&quot;: Object {</span>
<span class="term-fg2"> &quot;profile&quot;: Object {</span>
<span class="term-fg32">- &quot;displayName&quot;: &quot;Charles Lowell&quot;,</span>
<span class="term-fg31">+ &quot;displayName&quot;: &quot;cowboyd&quot;,</span>
<span class="term-fg2"> &quot;email&quot;: &quot;cowboyd@example.com&quot;,</span>
<span class="term-fg32">- &quot;picture&quot;: &quot;https:&#47;&#47;avatars.dicebear.com&#47;api&#47;open-peeps&#47;cowboyd.svg&quot;,</span>
<span class="term-fg2"> },</span>
<span class="term-fg2"> },</span>
<span class="term-fg2"> }</span>
&nbsp;
<span class="term-fg2"> </span> <span class="term-fgi90"> 52 |</span> }
<span class="term-fg2"> </span> <span class="term-fgi90"> 53 |</span> }
<span class="term-fg2"> </span><span class="term-fg31 term-fg1">&gt;</span><span class="term-fgi90 term-fg2"> 54 |</span><span class="term-fg2"> })</span><span class="term-fg33 term-fg2">.</span><span class="term-fg2">toMatchObject({</span>
<span class="term-fg2"> </span> <span class="term-fgi90"> |</span> <span class="term-fg31 term-fg1">^</span>
<span class="term-fg2"> </span> <span class="term-fgi90"> 55 |</span> spec<span class="term-fg33">:</span> {
<span class="term-fg2"> </span> <span class="term-fgi90"> 56 |</span> profile<span class="term-fg33">:</span> {
<span class="term-fg2"> </span> <span class="term-fgi90"> 57 |</span> email<span class="term-fg33">:</span> <span class="term-fg32">&#39;cowboyd@example.com&#39;</span><span class="term-fg33">,</span>
&nbsp;
<span class="term-fg2"> at Object.&lt;anonymous&gt; (</span><span class="term-fg36">catalog.test.ts</span><span class="term-fg2">:54:8)</span>
<span class="term-fg2"> at ..&#47;..&#47;..&#47;node_modules&#47;@effection&#47;core&#47;src&#47;controller&#47;iterator-controller.ts:61:29</span>
<span class="term-fg2"> at ..&#47;..&#47;..&#47;node_modules&#47;@effection&#47;core&#47;src&#47;controller&#47;iterator-controller.ts:36:16</span>
<span class="term-fg2"> at Object.run (..&#47;..&#47;..&#47;node_modules&#47;@effection&#47;core&#47;src&#47;run-loop.ts:24:15)</span>
<span class="term-fg2"> at resume (..&#47;..&#47;..&#47;node_modules&#47;@effection&#47;core&#47;src&#47;controller&#47;iterator-controller.ts:33:21)</span>
<span class="term-fg2"> at trap (..&#47;..&#47;..&#47;node_modules&#47;@effection&#47;core&#47;src&#47;controller&#47;iterator-controller.ts:61:7)</span>
<span class="term-fg2"> at run (..&#47;..&#47;..&#47;node_modules&#47;@effection&#47;core&#47;src&#47;future.ts:104:11)</span>
<span class="term-fg2"> at Object.run (..&#47;..&#47;..&#47;node_modules&#47;@effection&#47;core&#47;src&#47;run-loop.ts:24:15)</span>
<span class="term-fg2"> at produce (..&#47;..&#47;..&#47;node_modules&#47;@effection&#47;core&#47;src&#47;future.ts:115:15)</span>
<span class="term-fg2"> at finalize (..&#47;..&#47;..&#47;node_modules&#47;@effection&#47;core&#47;src&#47;task.ts:514:5)</span>
<span class="term-fg2"> at ..&#47;..&#47;..&#47;node_modules&#47;@effection&#47;core&#47;src&#47;task.ts:462:5</span>
<span class="term-fg2"> at run (..&#47;..&#47;..&#47;node_modules&#47;@effection&#47;core&#47;src&#47;future.ts:104:11)</span>
<span class="term-fg2"> at Object.run (..&#47;..&#47;..&#47;node_modules&#47;@effection&#47;core&#47;src&#47;run-loop.ts:24:15)</span>
<span class="term-fg2"> at produce (..&#47;..&#47;..&#47;node_modules&#47;@effection&#47;core&#47;src&#47;future.ts:115:15)</span>
<span class="term-fg2"> at Promise.race.then.produce.state (..&#47;..&#47;..&#47;node_modules&#47;@effection&#47;core&#47;src&#47;controller&#47;promise-controller.ts:11:9)</span>
<span class="term-fg2"> at runMicrotasks (&lt;anonymous&gt;)</span>
&nbsp;
<span class="term-fg31 term-fg1"> ● catalog ingestion › ingests the example user from ldap into the catalog</span>
&nbsp;
<span class="term-fg2">expect(</span><span class="term-fg31">received</span><span class="term-fg2">).</span>toMatchObject<span class="term-fg2">(</span><span class="term-fg32">expected</span><span class="term-fg2">)</span>
&nbsp;
<span class="term-fg32">- Expected - 2</span>
<span class="term-fg31">+ Received + 1</span>
&nbsp;
<span class="term-fg2"> Object {</span>
<span class="term-fg2"> &quot;spec&quot;: Object {</span>
<span class="term-fg2"> &quot;profile&quot;: Object {</span>
<span class="term-fg32">- &quot;displayName&quot;: &quot;Charles Lowell&quot;,</span>
<span class="term-fg31">+ &quot;displayName&quot;: &quot;cowboyd&quot;,</span>
<span class="term-fg2"> &quot;email&quot;: &quot;cowboyd@example.com&quot;,</span>
<span class="term-fg32">- &quot;picture&quot;: &quot;https:&#47;&#47;avatars.dicebear.com&#47;api&#47;open-peeps&#47;cowboyd.svg&quot;,</span>
<span class="term-fg2"> },</span>
<span class="term-fg2"> },</span>
<span class="term-fg2"> }</span>
&nbsp;
<span class="term-fg2"> </span> <span class="term-fgi90"> 52 |</span> }
<span class="term-fg2"> </span> <span class="term-fgi90"> 53 |</span> }
<span class="term-fg2"> </span><span class="term-fg31 term-fg1">&gt;</span><span class="term-fgi90 term-fg2"> 54 |</span><span class="term-fg2"> })</span><span class="term-fg33 term-fg2">.</span><span class="term-fg2">toMatchObject({</span>
<span class="term-fg2"> </span> <span class="term-fgi90"> |</span> <span class="term-fg31 term-fg1">^</span>
<span class="term-fg2"> </span> <span class="term-fgi90"> 55 |</span> spec<span class="term-fg33">:</span> {
<span class="term-fg2"> </span> <span class="term-fgi90"> 56 |</span> profile<span class="term-fg33">:</span> {
<span class="term-fg2"> </span> <span class="term-fgi90"> 57 |</span> email<span class="term-fg33">:</span> <span class="term-fg32">&#39;cowboyd@example.com&#39;</span><span class="term-fg33">,</span>
&nbsp;
<span class="term-fg2"> at Object.&lt;anonymous&gt; (</span><span class="term-fg36">catalog.test.ts</span><span class="term-fg2">:54:8)</span>
<span class="term-fg2"> at ..&#47;..&#47;..&#47;node_modules&#47;@effection&#47;core&#47;src&#47;controller&#47;iterator-controller.ts:61:29</span>
<span class="term-fg2"> at ..&#47;..&#47;..&#47;node_modules&#47;@effection&#47;core&#47;src&#47;controller&#47;iterator-controller.ts:36:16</span>
<span class="term-fg2"> at Object.run (..&#47;..&#47;..&#47;node_modules&#47;@effection&#47;core&#47;src&#47;run-loop.ts:24:15)</span>
<span class="term-fg2"> at resume (..&#47;..&#47;..&#47;node_modules&#47;@effection&#47;core&#47;src&#47;controller&#47;iterator-controller.ts:33:21)</span>
<span class="term-fg2"> at trap (..&#47;..&#47;..&#47;node_modules&#47;@effection&#47;core&#47;src&#47;controller&#47;iterator-controller.ts:61:7)</span>
<span class="term-fg2"> at run (..&#47;..&#47;..&#47;node_modules&#47;@effection&#47;core&#47;src&#47;future.ts:104:11)</span>
<span class="term-fg2"> at Object.run (..&#47;..&#47;..&#47;node_modules&#47;@effection&#47;core&#47;src&#47;run-loop.ts:24:15)</span>
<span class="term-fg2"> at produce (..&#47;..&#47;..&#47;node_modules&#47;@effection&#47;core&#47;src&#47;future.ts:115:15)</span>
<span class="term-fg2"> at finalize (..&#47;..&#47;..&#47;node_modules&#47;@effection&#47;core&#47;src&#47;task.ts:514:5)</span>
<span class="term-fg2"> at ..&#47;..&#47;..&#47;node_modules&#47;@effection&#47;core&#47;src&#47;task.ts:462:5</span>
<span class="term-fg2"> at run (..&#47;..&#47;..&#47;node_modules&#47;@effection&#47;core&#47;src&#47;future.ts:104:11)</span>
<span class="term-fg2"> at Object.run (..&#47;..&#47;..&#47;node_modules&#47;@effection&#47;core&#47;src&#47;run-loop.ts:24:15)</span>
<span class="term-fg2"> at produce (..&#47;..&#47;..&#47;node_modules&#47;@effection&#47;core&#47;src&#47;future.ts:115:15)</span>
<span class="term-fg2"> at Promise.race.then.produce.state (..&#47;..&#47;..&#47;node_modules&#47;@effection&#47;core&#47;src&#47;controller&#47;promise-controller.ts:11:9)</span>
<span class="term-fg2"> at runMicrotasks (&lt;anonymous&gt;)</span>
&nbsp;
<span class="term-fg1">Test Suites: </span><span class="term-fg31 term-fg1">1 failed</span>, 1 total
<span class="term-fg1">Tests: </span><span class="term-fg31 term-fg1">1 failed</span>, <span class="term-fg32 term-fg1">2 passed</span>, 3 total
<span class="term-fg1">Snapshots: </span>0 total
<span class="term-fg1">Time:</span> 24.608 s, estimated 25 s
<span class="term-fg2">Ran all test suites.</span>
<span class="term-fg31">error</span> Command failed with exit code 1.</div>
</body>
</html>
 PASS  src/catalog.test.ts (20.024 s)
catalog ingestion
✓ can connect to the catalog (6141 ms)
✓ ingests the artist lookup component (5469 ms)
✓ ingests the example user from ldap into the catalog (5020 ms)
Test Suites: 1 passed, 1 total
Tests: 3 passed, 3 total
Snapshots: 0 total
Time: 20.366 s
Ran all test suites.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>terminal-to-html Preview</title>
<style>.term-container {
background: #171717;
border-radius: 5px;
color: white;
word-break: break-word;
overflow-wrap: break-word;
font-family: Monaco, courier;
font-size: 12px;
line-height: 20px;
padding: 14px 18px;
white-space: pre-wrap;
}
.term-fg1 { } /* don't bold beccause it looks weird */
.term-fg3 { font-style: italic; } /* italic */
.term-fg4 { text-decoration: underline; } /* underline */
.term-fg9 { text-decoration: line-through; } /* crossed-out */
.term-fg30 { color: #666; } /* black (but we can't use black, so a diff color) */
.term-fg31 { color: #e10c02; } /* red */
.term-fg32 { color: #99ff5e; } /* green */
.term-fg33 { color: #c6c502; } /* yellow */
.term-fg34 { color: #8db7e0; } /* blue */
.term-fg35 { color: #f271fb; } /* magenta */
.term-fg36 { color: #00cdd9; } /* cyan */
/* high intense colors */
.term-fgi1 { color: #5ef765; }
.term-fgi90 { color: #838887; } /* grey */
/* background colors */
.term-bg42 { background: #99ff5f; }
.term-bg40 { background: #676767; }
/* custom foreground/background combos for readability */
.term-fg31.term-bg40 { color: #F8A39F; }
/* xterm colors */
.term-fgx16 { color: #000000; }
.term-fgx17 { color: #00005f; }
.term-fgx18 { color: #000087; }
.term-fgx19 { color: #0000af; }
.term-fgx20 { color: #0000d7; }
.term-fgx21 { color: #0000ff; }
.term-fgx22 { color: #005f00; }
.term-fgx23 { color: #005f5f; }
.term-fgx24 { color: #005f87; }
.term-fgx25 { color: #005faf; }
.term-fgx26 { color: #005fd7; }
.term-fgx27 { color: #005fff; }
.term-fgx28 { color: #008700; }
.term-fgx29 { color: #00875f; }
.term-fgx30 { color: #008787; }
.term-fgx31 { color: #0087af; }
.term-fgx32 { color: #0087d7; }
.term-fgx33 { color: #0087ff; }
.term-fgx34 { color: #00af00; }
.term-fgx35 { color: #00af5f; }
.term-fgx36 { color: #00af87; }
.term-fgx37 { color: #00afaf; }
.term-fgx38 { color: #00afd7; }
.term-fgx39 { color: #00afff; }
.term-fgx40 { color: #00d700; }
.term-fgx41 { color: #00d75f; }
.term-fgx42 { color: #00d787; }
.term-fgx43 { color: #00d7af; }
.term-fgx44 { color: #00d7d7; }
.term-fgx45 { color: #00d7ff; }
.term-fgx46 { color: #00ff00; }
.term-fgx47 { color: #00ff5f; }
.term-fgx48 { color: #00ff87; }
.term-fgx49 { color: #00ffaf; }
.term-fgx50 { color: #00ffd7; }
.term-fgx51 { color: #00ffff; }
.term-fgx52 { color: #5f0000; }
.term-fgx53 { color: #5f005f; }
.term-fgx54 { color: #5f0087; }
.term-fgx55 { color: #5f00af; }
.term-fgx56 { color: #5f00d7; }
.term-fgx57 { color: #5f00ff; }
.term-fgx58 { color: #5f5f00; }
.term-fgx59 { color: #5f5f5f; }
.term-fgx60 { color: #5f5f87; }
.term-fgx61 { color: #5f5faf; }
.term-fgx62 { color: #5f5fd7; }
.term-fgx63 { color: #5f5fff; }
.term-fgx64 { color: #5f8700; }
.term-fgx65 { color: #5f875f; }
.term-fgx66 { color: #5f8787; }
.term-fgx67 { color: #5f87af; }
.term-fgx68 { color: #5f87d7; }
.term-fgx69 { color: #5f87ff; }
.term-fgx70 { color: #5faf00; }
.term-fgx71 { color: #5faf5f; }
.term-fgx72 { color: #5faf87; }
.term-fgx73 { color: #5fafaf; }
.term-fgx74 { color: #5fafd7; }
.term-fgx75 { color: #5fafff; }
.term-fgx76 { color: #5fd700; }
.term-fgx77 { color: #5fd75f; }
.term-fgx78 { color: #5fd787; }
.term-fgx79 { color: #5fd7af; }
.term-fgx80 { color: #5fd7d7; }
.term-fgx81 { color: #5fd7ff; }
.term-fgx82 { color: #5fff00; }
.term-fgx83 { color: #5fff5f; }
.term-fgx84 { color: #5fff87; }
.term-fgx85 { color: #5fffaf; }
.term-fgx86 { color: #5fffd7; }
.term-fgx87 { color: #5fffff; }
.term-fgx88 { color: #870000; }
.term-fgx89 { color: #87005f; }
.term-fgx90 { color: #870087; }
.term-fgx91 { color: #8700af; }
.term-fgx92 { color: #8700d7; }
.term-fgx93 { color: #8700ff; }
.term-fgx94 { color: #875f00; }
.term-fgx95 { color: #875f5f; }
.term-fgx96 { color: #875f87; }
.term-fgx97 { color: #875faf; }
.term-fgx98 { color: #875fd7; }
.term-fgx99 { color: #875fff; }
.term-fgx100 { color: #878700; }
.term-fgx101 { color: #87875f; }
.term-fgx102 { color: #878787; }
.term-fgx103 { color: #8787af; }
.term-fgx104 { color: #8787d7; }
.term-fgx105 { color: #8787ff; }
.term-fgx106 { color: #87af00; }
.term-fgx107 { color: #87af5f; }
.term-fgx108 { color: #87af87; }
.term-fgx109 { color: #87afaf; }
.term-fgx110 { color: #87afd7; }
.term-fgx111 { color: #87afff; }
.term-fgx112 { color: #87d700; }
.term-fgx113 { color: #87d75f; }
.term-fgx114 { color: #87d787; }
.term-fgx115 { color: #87d7af; }
.term-fgx116 { color: #87d7d7; }
.term-fgx117 { color: #87d7ff; }
.term-fgx118 { color: #87ff00; }
.term-fgx119 { color: #87ff5f; }
.term-fgx120 { color: #87ff87; }
.term-fgx121 { color: #87ffaf; }
.term-fgx122 { color: #87ffd7; }
.term-fgx123 { color: #87ffff; }
.term-fgx124 { color: #af0000; }
.term-fgx125 { color: #af005f; }
.term-fgx126 { color: #af0087; }
.term-fgx127 { color: #af00af; }
.term-fgx128 { color: #af00d7; }
.term-fgx129 { color: #af00ff; }
.term-fgx130 { color: #af5f00; }
.term-fgx131 { color: #af5f5f; }
.term-fgx132 { color: #af5f87; }
.term-fgx133 { color: #af5faf; }
.term-fgx134 { color: #af5fd7; }
.term-fgx135 { color: #af5fff; }
.term-fgx136 { color: #af8700; }
.term-fgx137 { color: #af875f; }
.term-fgx138 { color: #af8787; }
.term-fgx139 { color: #af87af; }
.term-fgx140 { color: #af87d7; }
.term-fgx141 { color: #af87ff; }
.term-fgx142 { color: #afaf00; }
.term-fgx143 { color: #afaf5f; }
.term-fgx144 { color: #afaf87; }
.term-fgx145 { color: #afafaf; }
.term-fgx146 { color: #afafd7; }
.term-fgx147 { color: #afafff; }
.term-fgx148 { color: #afd700; }
.term-fgx149 { color: #afd75f; }
.term-fgx150 { color: #afd787; }
.term-fgx151 { color: #afd7af; }
.term-fgx152 { color: #afd7d7; }
.term-fgx153 { color: #afd7ff; }
.term-fgx154 { color: #afff00; }
.term-fgx155 { color: #afff5f; }
.term-fgx156 { color: #afff87; }
.term-fgx157 { color: #afffaf; }
.term-fgx158 { color: #afffd7; }
.term-fgx159 { color: #afffff; }
.term-fgx160 { color: #d70000; }
.term-fgx161 { color: #d7005f; }
.term-fgx162 { color: #d70087; }
.term-fgx163 { color: #d700af; }
.term-fgx164 { color: #d700d7; }
.term-fgx165 { color: #d700ff; }
.term-fgx166 { color: #d75f00; }
.term-fgx167 { color: #d75f5f; }
.term-fgx168 { color: #d75f87; }
.term-fgx169 { color: #d75faf; }
.term-fgx170 { color: #d75fd7; }
.term-fgx171 { color: #d75fff; }
.term-fgx172 { color: #d78700; }
.term-fgx173 { color: #d7875f; }
.term-fgx174 { color: #d78787; }
.term-fgx175 { color: #d787af; }
.term-fgx176 { color: #d787d7; }
.term-fgx177 { color: #d787ff; }
.term-fgx178 { color: #d7af00; }
.term-fgx179 { color: #d7af5f; }
.term-fgx180 { color: #d7af87; }
.term-fgx181 { color: #d7afaf; }
.term-fgx182 { color: #d7afd7; }
.term-fgx183 { color: #d7afff; }
.term-fgx184 { color: #d7d700; }
.term-fgx185 { color: #d7d75f; }
.term-fgx186 { color: #d7d787; }
.term-fgx187 { color: #d7d7af; }
.term-fgx188 { color: #d7d7d7; }
.term-fgx189 { color: #d7d7ff; }
.term-fgx190 { color: #d7ff00; }
.term-fgx191 { color: #d7ff5f; }
.term-fgx192 { color: #d7ff87; }
.term-fgx193 { color: #d7ffaf; }
.term-fgx194 { color: #d7ffd7; }
.term-fgx195 { color: #d7ffff; }
.term-fgx196 { color: #ff0000; }
.term-fgx197 { color: #ff005f; }
.term-fgx198 { color: #ff0087; }
.term-fgx199 { color: #ff00af; }
.term-fgx200 { color: #ff00d7; }
.term-fgx201 { color: #ff00ff; }
.term-fgx202 { color: #ff5f00; }
.term-fgx203 { color: #ff5f5f; }
.term-fgx204 { color: #ff5f87; }
.term-fgx205 { color: #ff5faf; }
.term-fgx206 { color: #ff5fd7; }
.term-fgx207 { color: #ff5fff; }
.term-fgx208 { color: #ff8700; }
.term-fgx209 { color: #ff875f; }
.term-fgx210 { color: #ff8787; }
.term-fgx211 { color: #ff87af; }
.term-fgx212 { color: #ff87d7; }
.term-fgx213 { color: #ff87ff; }
.term-fgx214 { color: #ffaf00; }
.term-fgx215 { color: #ffaf5f; }
.term-fgx216 { color: #ffaf87; }
.term-fgx217 { color: #ffafaf; }
.term-fgx218 { color: #ffafd7; }
.term-fgx219 { color: #ffafff; }
.term-fgx220 { color: #ffd700; }
.term-fgx221 { color: #ffd75f; }
.term-fgx222 { color: #ffd787; }
.term-fgx223 { color: #ffd7af; }
.term-fgx224 { color: #ffd7d7; }
.term-fgx225 { color: #ffd7ff; }
.term-fgx226 { color: #ffff00; }
.term-fgx227 { color: #ffff5f; }
.term-fgx228 { color: #ffff87; }
.term-fgx229 { color: #ffffaf; }
.term-fgx230 { color: #ffffd7; }
.term-fgx231 { color: #ffffff; }
.term-fgx232 { color: #080808; }
.term-fgx233 { color: #121212; }
.term-fgx234 { color: #1c1c1c; }
.term-fgx235 { color: #262626; }
.term-fgx236 { color: #303030; }
.term-fgx237 { color: #3a3a3a; }
.term-fgx238 { color: #444444; }
.term-fgx239 { color: #4e4e4e; }
.term-fgx240 { color: #585858; }
.term-fgx241 { color: #626262; }
.term-fgx242 { color: #6c6c6c; }
.term-fgx243 { color: #767676; }
.term-fgx244 { color: #808080; }
.term-fgx245 { color: #8a8a8a; }
.term-fgx246 { color: #949494; }
.term-fgx247 { color: #9e9e9e; }
.term-fgx248 { color: #a8a8a8; }
.term-fgx249 { color: #b2b2b2; }
.term-fgx250 { color: #bcbcbc; }
.term-fgx251 { color: #c6c6c6; }
.term-fgx252 { color: #d0d0d0; }
.term-fgx253 { color: #dadada; }
.term-fgx254 { color: #e4e4e4; }
.term-fgx255 { color: #eeeeee; }
</style>
</head>
<body>
<div class="term-container"><span class="term-fg32 term-fg1"> PASS </span> <span class="term-fg2">src&#47;</span><span class="term-fg1">catalog.test.ts</span> (<span class="term-bg41 term-fg1">20.024 s</span>)
catalog ingestion
<span class="term-fg32">✓</span> <span class="term-fg2">can connect to the catalog (6141 ms)</span>
<span class="term-fg32">✓</span> <span class="term-fg2">ingests the artist lookup component (5469 ms)</span>
<span class="term-fg32">✓</span> <span class="term-fg2">ingests the example user from ldap into the catalog (5020 ms)</span>
&nbsp;
<span class="term-fg1">Test Suites: </span><span class="term-fg32 term-fg1">1 passed</span>, 1 total
<span class="term-fg1">Tests: </span><span class="term-fg32 term-fg1">3 passed</span>, 3 total
<span class="term-fg1">Snapshots: </span>0 total
<span class="term-fg1">Time:</span> <span class="term-fg33 term-fg1">20.366 s</span>
<span class="term-fg2">Ran all test suites.</span></div>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment