►
From YouTube: Frontend Pairing - Jest speed reporter (Part 2)
Description
We continued working on: https://gitlab.com/gitlab-org/frontend/jest-speed-reporter
B
A
I
I
will
just
I
will
just
continue
bootstrapping
it
here.
Yeah,
I'm.
C
A
Yeah
yeah
do
that
it's
should
be
pretty
easy.
So
what
do
we
have
here?
So
I
just
copied
my
script.
That's
the
script
right,
so
we
can
do
a
yarn
and
what
do
we
need?
Axios?
I
think
axios.
Why
do
I
have
moment?
I
don't
need
moment.
I
don't
need
fail,
that's
good
axios
moment
dot!
Moment.We!
Don't
need
right.
I
think.
That's
it
yeah!
That's
it!
We
just
need
axios.
For
now
I
just
made
it
a
private
project.
A
A
And
should
be
pretty
easy,
so
what
do
we
need
to
do?
We
have
a
gitlab
ab
ar
this
is
all
don't
care
about
this
stuff.
What
what
is
happening
had
some
weird
focus,
probably
api.js,
and
let
me
just
pop
up
enable
coding
assistance
for
this
const
axios.
C
Gitlab
token
right
is:
is
this
something
that
says
are
these
reports?
Scene
has
to
be
authenticated
to
yes,
okay,.
A
You
often
have
to
be
it's
really
weird.
We
have
some
apis
where
you,
where
you
have
to
be
like
authenticated
and
it's
annoying
and
yeah.
Okay,
we
wanted
to
get
lab
api.
A
So
this
one
is
actually
jobs,
nice
yeah,
so
we
we
have
a
job
iterator,
but
we
don't
really
need
that.
We
can
that
just
do
like
a
have
a
gitlab
api
iterator
right,
because
we
basically
just
need
a
path,
and
in
this
case
it
doesn't
oops
in
this
case.
It's
just
like
api
path
and
we
can
be
api
path.
A
Api
path,
api
path,
pipeline
id
can
be
gone
and
then
it
makes
it
a
bit
easier
and
we
just
iterate
over
the
api
path
right
which
allows
us
to
be
to
do
the
following.
Const
get
lab
api.
A
A
Do
we
need
that
one
or
do
we
need
the
jobs
api?
So
we
we
need
the
we
nee.
We
need
the
latest
pipeline
for
the
project
gotcha
and
then
we're
getting.
A
C
A
Let's,
let's
we
make
it
watch
the
second
paul
you're.
Getting
ahead
of
yourself
is
a
new
gitlab
api
iterator,
and
we
just
have
that
url
right
and
what's
the
pipeline
id
of
gitlab
e,
oh
gosh,
I
don't.
D
D
Id
the
project
id.
B
A
The
id
that's
the
cool
thing
about
an
id,
it
doesn't
change
right.
So,
let's,
let's
do
this?
We
want
to
have
status.
A
A
Obviously
we
need
to
teach
the
iterator
about.
Why
doesn't
jump
there?
We
just
like
you
know,
like
params
equals,
and
then
you
know
this
params
equals
this,
and
then
we
ramps
that
we're
passing
it
yeah
you're
right
params,
and
then
we
can
be
like
params.
A
This
is
a
bit
awkward
and
I
think
it
could
be
reflected
right,
but
the
cool
thing
is
like
this
params,
because
we
obviously
want
the
I
mean.
Maybe
we
want
to
overwrite
per
page,
but
the
page
at
least
should
be
there
by
the
way.
This
iterator
is
actually
pretty
simple
right,
so
it
has
an
async.
Next,
as
long
is
like.
Maybe
we
should
rename
commits
to
like
something
more
generalized
identities
or
items
is
good.
A
I
like
items
right
so
basically
how
this
works
is
like
unless
you're
on
the
last
page
right
it
it
iterates
through
and
as
long
as
you
has
item
have
items
it
just
you
know,
returns
those
items
by
the
way.
This
also
can
be
rewritten
a
little
bit
with
a
generator
pattern,
and
then
it's
even
more
nicer
yeah,
because
then
you
can
just
yield
the
values
as
long
as
you
have
them,
and
if
you
have
no
values
anymore,
you
just
jump
back
into
your
loop.
I
have
that
iterator
somewhere
lying
around.
A
I
wonder
for
which
tool
I've
written
that
one,
but
anyway
should
like
be
like
good
right
and
then
we
can
be
like
four
await
and
then
pipeline
off
pipeline.
It's
a
I
mean
it's
an
instance
right,
so
it
should
be.
A
A
Yeah,
so
now
we
can
all
find
where
my
token
is
right.
We
have
this
like
tenth.
A
No,
where
is
it
like
yeah
there?
It
is
yeah
eval.
So
oh
gitlab
iterator
is
not
defined.
Gitlab
api
iterator.
What
is
not
defined
yeah?
We
should
properly
export
it
as
well
right.
So
now
we
should
get
pipeline
for
pipeline.
You
see
that
oh
it's
yeah.
Maybe
we
should
and
then
in
this
loop
I
would
simply
you
know,
be
like
hey:
let's
create
a
jobs,
iterator
right.
A
A
And
we
can
be
like
console
if,
okay,
let's
be
like
const,
just
jobs,
equals
empty
array,
an
empty
array.
Exactly
then
we
just
drew
like
job
name
starts
with,
and
we
just
do
just
space
right.
We
could,
because
we
have
the
jest
integration,
one
which
we
don't
want.
You
know,
but
should
be
good
for
now.
Then
we
just
then
we
just
do
like
a
const
data.
C
We
had
built
a
graphql
query
that
there
you
get
some
of
this
slash
artifacts.
C
D
A
So
this
is
getting
all
artifacts
right.
Download
get
job,
artifacts,
okay,
get
a
single
artifact,
so
this
is
also
really
weird
by
the
way
like
single
artifact
by
job
id.
C
A
Let
me
just
check
like
real
quickly
because
we
changed
it
yeah.
If
you
have
it
easier,
you
know
what
we're
going
to
do.
We're
just
going
to
push
this
wait
a
second
and
then
we
can
be
like
hey
if
justjobs
length,
we
just
have
break
right
and.
A
Jess
jobs
is
undefined.
Yeah
yeah
give.
A
Yeah,
that's
a
good
idea.
Let
me
let
me
let
me
just
you
know,
yeah
you're
good.
A
For
now
we
should
be,
but
it
ended
somewhere
right
like
and
we
can
see
here,
and
the
good
thing
is
that
we
actually
have
artifacts
here
as
an
array
right.
We
should
be
able
to.
You
know,
that's
a
good.
You
know:
const
no
async
function
get
latest
pipeline
with
or
get
latest
gesture
effects.
Just
just,
I
think
it's
get
latest
jazz
jobs,
yeah.
A
B
A
Works.
This
is
by
the
way
this
is
funny,
so
I
think
we
actually
need
to
change
something
in
our
pipeline
by
the
way,
because
there
is
currently
no
api
to
retrieve
this,
but
maybe
let's
just
try
it
out.
So
we
have
you
talking
about
retrieve
the
file
type,
so
this
has
the
file
type
junit
and,
as
far
as
I
know,
right
now
for
job,
it's
not
possible
to
get
the
junit
stuff
right.
A
A
No,
it's
that's
what
I'm
just
going
to
try
out
right,
so
we
have
like
the
download
single
artifact
from
from
by
job
id
right.
So,
let's
what?
What
do
they
have
as
a
comment
here?
So
this
should
be
the
file
right?
A
A
You're
doing
you're
good
yeah
yeah,
it's
just
more
like
hey,
let's
try
it
for
for
one
and
it
should
be
junit
xml,
dot,
gzip
yeah.
So
let's
try
it.
We
also
should
do
something
with
the
data
right.
B
B
A
A
A
D
A
C
C
A
Exactly
and
it
that
makes
it
also
easy,
because
it's
just
a
static
file,
it
has
other
benefits
so
often,
for
example,
here
we
are
likely
to
have
some
json
artifact
right
and
what
I'm
also
doing
is
I'm
putting
that
json
artifact
into
into
the
artifact
of
that
job,
which
is
great
because
right
now
we
just
generated
for
the
moment
being.
But
if
we
have
the
json
artifact
and
at
some
point
are
like
hey,
maybe
we
want
to
track
some
stuff
over
time.
A
C
Could
even
do
an
ip
and
peyton
what
we
were
talking
about
earlier,
like
we
can
even
do
notifications
in
that
scheduled
job
of
like
yeah.
That
would
that
sounds
really
awesome.
I'm
excited
about
this
yeah,
I'm
glad
we
went
this
route.
A
A
B
A
D
D
C
C
A
Yeah,
I
actually,
you
know,
wanted
to
take
the
iterator
and
publish
it,
because
I
think
it's
it's
really
neat,
because
all
of
our
rest
apis
worked
like
that
and
yeah.
I
think
the
only
feature
it
would
need
in
its
current
state
that
you
have
like
hey.
I
want
to
have
like
a
max
thing
right.
I
don't
want
to
go
through
a
thousand
pages
or
something
by
the
way.
D
A
Also,
how
you
can
improve
that's
the
reason
why
I
didn't
have
the
per
page,
so
it's
very
unlikely
that
we
go
through.
Let's
say
a
hundred
right.
Often
if
you're
like
I
want
to
have
all
commits
of
a
project,
you
just
say
per
page
100
to
paginate
faster
right,
but
here,
for
example,
it
actually
would
make
sense
to
like
pay
per
page
five,
because
it's
very
likely
that
one
of
the
first
pipelines
actually
has
a
successful
jazz
job
right.
A
So,
let's,
let's,
let's
have
a
look.
What
happens
here
and
we
also
probably
should
add
some
oh
yeah.
This
looks
good,
you
know
what
we're
going
to
do
is
like
hey.
A
A
C
Like
for
these
kind
of
scripts,
to
let
bash
do
the
piping
if
and
like,
let's
just
control,
what's
this
output,
and
so
I
don't
even
have
to
worry
about
like
receiving
a
certain
input
path
or
mess
with
anything
like
that.
Yeah,
that's
that's
actually
smart,
but
this,
but
for
just
so
we
can
see
it
makes
sense.
Yeah.
C
Yeah
this
sounds
like
a
lot
of
fun
either
way
or
are
we
doing
it
all
now.
D
C
Plans
today
peyton
because
well
I
think
I
think,
once
we
get
the
data,
I
have
a
few
things
I
need
to
do
today
besides
this,
but
maybe,
if
you
want
to
pair
on
all
of
it
together,
maybe
monday
peyton
well,
I
can
pick
up
some
of
it
today.
A
C
Yeah,
while
it's
formatted,
because
it's
humongous
and
one
optimization
we
could
make-
is
maybe
instead
of
transferring
it
all
to
json
and
reading
through
it,
maybe
there
is
actually
an
xml
reader
that
we
could
use
because
here's
the
end
format,
I
would
think,
would
be
super
helpful.
A
You
know
you
know
to
be
honest,
like
this
doesn't
take
long
at
all,
so
I
would
just
be
like
the
only
thing
is
like
we
have.
This
test
suits
global
object,
which
we
don't
need,
because
it's
basically
the
individual
thing
of
those
four
I
mean
it
re.
Basically,
what
I
think
we
are
interested
in
is
all
the
test
suites,
which
is
like
this
array
right.
So
the
only
thing
that
I
just
wanted
to
know
is
like
hey,
give
me
the
the
test.
Suites
suites.
Is
this
one
right?
A
Oh
so
so
it's
test
suites
right
and
I
basically
want
this
all
right,
and
so
I
can
just
be
now
like
hey
const
test
suites
equals
jess
jobs,
dot
flat
map,
and
then
we
have
like
job,
and
we
do
this
thing
where
we
do
our
await
here.
Oh
async
done.
C
Now,
let's
keep
it
like
that?
Well,
I
think
if,
if
you
pull
into
another
function,
the
if
we
do
like
a
fetch
test
suite
for
job
that
could
make
it
like
a
really
very
readable
mind,
but
it's
I
get
what
you're
saying
what
I
wanted
to
talk
about
while
we're
here,
because
I'm
gonna
have
to
hop
off
in
a
little
bit.
This
is
so
freaking
helpful.
I
really
appreciate
iep.
C
I
haven't
realized
it
until
now,
but
this
has
like
been
bothering
me
for
a
couple
of
months,
and
I
just
I
just
sit
there
worrying
about
it.
Instead
of
not,
instead
of
doing
anything,
I'm
joking,
what
I
want
to
talk
about
is
like,
what's
the
ideal
output
of
this
data
that
we
think
could
be
helpful
for
me.
What
I
would
really
like
to
see
is
file
the
the
test
file
yep.
A
C
Okay,
I
knew
that
all
right
and
that's
fine.
We
can
keep
this.
We
can
keep
this
name
stuff.
This
is
why
it's
like,
and
if
you
ever
see
me.
C
D
C
A
C
D
C
Happy
right
and-
and
I
p
correct
me
if
I'm
wrong,
because
you've
built
more
of
these
kind
of
dashboards
than
I
have,
but
I'm
I
would
just
love
to
see,
here's
a
file
and
then
the
slowest
test
of
that
file
and
then
the
time
of
that
slowest
test.
So
then,
I
know
here's
the
files
that
we're
going
to
need
to
refactor
to
fix
these
things.
A
So
I
I
want
to
correct
you
a
little
bit
so
I
think
it
there
are
probably
multiple
views
right.
So
sometimes
you
have
like
a
file.
Sometimes
you
have
like
a
file,
that's
slow
and
you
want
to
fix
it,
but
sometimes
you
just
have
like
humongous
file.
That's
slow
right!
So
that's
fine
right.
If
you
essentially
yeah,
I
think
you're
right
so
essentially
what
I
probably
would
build.
I
would
build
one
table.
A
A
You're
basically
worried
about
those
right.
You
want
the
slowest.
So
why
don't
we?
Why
don't
we
build
a
table
that
you
know
and
excuse
the
markdown?
We
need
a
readme
anyway,
guys
right
so
peyton.
This
is
something
that
I
really
hate.
Writing,
so
imagine
imagine
we
have
like
like
this
one
right.
A
So
what
what
if
like?
Because
this
would
be
the
file
name
right,
so
example-
path,
dot,
spec,
js,
right
and
then
we
are
just
like
here
and
then
we
just
have
time
right.
So
we
have
like
spec
time.
A
And
then
we
have
like
two
seconds
right
whatever
and
we
have
seconds,
and
we
just
sort
that
by
we
just
sort
that
by
longest
running
test,
there's.
C
So
it's
gonna
end
up
being
really
to
me
when
I
know
like
okay,
what
are
my
slow
files
because
that's
like
how
we
create
issues
and
the
refactoring
is
like
based
on
spec
files,
like
it's
really
helpful
for
me
to
like,
let's
group
it
by
file,
and
so
what
I'm
really
interested
in
is
rather
than
the
individual
tests,
because
what
I'm
picturing
would
happen
is
I'll
have
like
20
all
from
one
file.
I
see
where
you're
going.
I
really.
A
D
A
Think
so
I
think
so
no,
no
that
doesn't
make
any
sense.
You
know
we
have.
It
might
be
sorry
for
that,
because
gitlab
ci
would
allow
us
to
just
have
it
in
pages
I
mean
how
large
are
these
jsons
ls.
A
A
lot
of
these
a
lot
of
these
contain
craft,
and
you
know
because,
like
here's,
a
lot
of
duplication
and
so
on,
so
I
think
in
in
total.
It's
like
four
megabytes
of
data.
I
would
just
either
be
if
you
want
to
go
crazy
and
go
the
next
route,
I
would
do
a
next
route
that
just
asynchronously
gets
like
the
combined
json
and
chose
it
or
you
know,
what's
really
fast,
an
html
file
yeah.
A
C
I
think
I
think,
using
a
static
site
generator
and
just
doing
a
no
javascript
solution
makes
makes
the
most
sense
and
because
yeah
it's
it's.
I
don't
think
any
there's
going
to
be
an
any
interaction
unless
you
think
we
need
to
do
like
filtering.
If
someone
wants
to
change
the
sort
or
something,
but
I.
D
Think
for
first
iteration
a
static
data
table
is
going
to
be
super
helpful.
C
Yeah
yeah
I've.
I've
only
used
hugo
like
for
doing
static
site
generating,
but
I
guess
what
you're
saying
oh,
we
could
even
use.
We
could
use
mustache,
oh
yeah,
because.
C
Yeah
but
but
those
have
a
cli
to
it
and
all
we
got
to
do
on
our
pipeline
when
we
build
the
pages
is
just
run:
here's
our
data,
here's,
the
here's,
the
mustache
file
and
we
output
the
index
html
and
boom
we're
done
so
yeah.
It
can
even
just
be
a
mustache
thing
cool.
That's
I'm
I'm
giddy
ip
yeah.
I
want
to
push
up
a
commit
today.
I
have
to
awesome
yeah.
I
love
it.
This.
D
A
A
C
C
There's
an
option,
so
you
can
pass
as
a
second
argument.
Yeah
yeah
to
the.
A
C
C
You
can
call
concat
on
it
since
it's
an
array
of
things,
yeah
you're
right.
Well,
you
got
to
do
the
test.
Suites
equals
test,
suites
concave.
A
D
D
C
C
D
A
Retrieve
j-unit
right,
artifact
right.
C
Something
like
that
or
like
or
like
yeah
fetch
fetch.
You
know.
A
A
Then
we
can
do
also
be
like
hey.
We
can.
Maybe
here,
do
a
console
one
and
like
got
data
for
pipeline,
and
then
we
template
string
makes
do
something
like
what's
the
thing
that
we
want
to
do.
It's
like
pipeline
dot
id.
A
Right:
okay,.
A
A
Okay,
so
we
have
oh
yeah.
Obviously
we
need
to
console
log
jason
stringify
test
suites
too
right,
yeah
yeah.
Thank
you.
No,
that's
not
what
I
want.
I
want
this.
A
C
C
A
cli-
I
don't
know
I
I
know
mustache
does
and
I'm
not
I'm
more
familiar
with
using
mustache
templating
than
pug,
but
yeah.
Then
we
just
run.
It
doesn't
even
have
to
be
a
party
here.
That'll
just
be
its
own
script.
That.
A
C
C
When,
when
we
do
console
log,
it
does
let
us
be,
I
think,
make
those
optimizations,
because
cli
can
read
from
a
file
lots
of
different
cli
things
can
read
from
a
file
or
or
a
string
or
a
string,
and
so
yeah
mustache.
You
can
also
do
a
stream
input
which
would
work
as
well,
so
we
don't
have
to
dump
to
disk
or
anything.
If
we
wanted
to
do.
C
That,
but
it's
not
it's
not
a
huge
deal,
and
that's
that's
just
my
that's
how
I
tend
to
approach
these
things.
A
So
one
of
the
things
that's
yeah-
I
like
that
too,
if
you
can
plug
in
things
together
right.
So
but
it's
like
hey,
let's,
let's
maybe
just
do
name
right.
Yes,.
A
Yeah,
exactly
that's
what
I
mean
right
yeah,
so
we
can
be
like,
and
so
this
is
this
one
right
and
we
can
be
like
return
and
then
it's
name.
It's
time
is
pause
in
time.
10
we
have.
Oh,
it's
not
positive.
It's
pass
float
anyway,
because
we
just
use
number
yeah
tests
is
just
the
count
of
tests.
A
C
A
Okay
and
then
we
say
slowest,
and
it's
just
like
test
case,
you
want
to
create
a
function,
called
find
slowest
test.
C
A
And
we
just
do
this
and
we
can
be
like
return,
oh
test
case
here.
We
can
at
least
go
plural
right.
Yes,
let's
please
do
that
cases,
and
then
we
can
do
a
map
and.
C
I
guess
we
we
could
you
can't
do
it
in
one
reduce
or
we
could
split
it
up.
C
C
You
know
what
I
mean
yeah
yeah,
so
you
could
do
the
redos
and
the
two
two
params
for
and
you
don't
need
to
pass
the
second
arc
to
it
either
it'll
it'll
already
start
kicking
for
you
pass
the
accumulator
hey,
I
usually
call
the
first
one
yeah
and
that
that
works
too
yep
and
then
yep
yeah
that
works.
That's
that
sounds
really
helpful.
A
C
Be
slow,
I
think,
will
actually
be
undefined.
Well,
let
me
double
check
yes,
you're
right.
I
think
you
do
want
to
pass
null
to
it.
That
makes
a
lot
of
sense,
because
these
are
different
types.
You
can't
use
like
a
reduce
to
do
summing
and
it
will
like
include
the
values,
but
we
don't
need
to
do
that
yeah.
I
think
that's
the
best
way
to
do
it.
So
if
we
don't
have
a
slowest
we're
going
to
return
the
current
yeah.
This
is
a
good
approach.
A
So,
what
what
do
we?
We
have
time
and
name
right.
So
we
again
have
time
name
equals
current
right
and
we
can
be.
A
C
What
one
that
one
pattern
I've
been
doing
lately
is:
if,
if
I
know
I'm
going
to
like
convert
something,
I'm
not
really
going
to
use
it
I'll
call
it
like
name
time,
but
then
I
I
rename
it
the
time
arg
yeah
like
I,
I
throw
like
arg
or
pram
at
the
end.
If
I
know
like
I'm,
not
really
going
to
use
this,
I
need
to
convert
it
first
or
something
like
that,
but
yeah.
This
makes
sense.
A
A
C
So
that
peyton
can
pick
up
the
the
template
part.
Do
you
mind
if
we
just
console
log
that
to
test
suites
for
right
now.
A
What
do
you?
What
do
you
guys?
What
do
you
think
if
we
just
do
the
following
wait?
We
also
have
the
problem
that
is
like
he
can
do
the
template,
I'm
just
going
to
be
like
hey
html,
see
what
we
need
a
right
file
sing.
C
Yeah
you
should,
I
would
suggest,
use
a
mustache.
The
cli
does
all
this
for
you,
you
don't
have
to
code
it.
A
A
Well,
the
performance
benefit,
for
example,
right
and
yeah.
C
A
C
That's
true,
I
don't
think
because
we're
aggregating
by
test
name,
the
json
is
gonna,
be
significantly
smaller
since
they're
activating
by
test
file,
rather
than
doing
each
test
name.
C
But
I
don't
I
don't.
I
don't
feel
super
strongly
about
it,
but
I
would
just
say:
hey,
let's,
let's.
I
just
really
want
to
see
the
data
right
now
and
that's
yeah
and
then
we'll
figure
out
what
we
do
later.
A
By
the
way,
so
that's
actually
a
good
call
out
lucas
slowest
time
slowest
test
time
and
it's
like
that
and
is
like
slowest
test
name
all
right.
C
C
A
A
C
Do
we
need
to
give
do
we
need
to
give
our
like
json
object,
a
root
object
now,
because
I
think
it's
just
an
array.
A
D
C
C
A
A
Oh
yes,
obviously,
this
xml
parser
the
problem
with
xml.
If
you
have
like
the
tag
multiple
times,
it
will
convert
it
to
an
array,
but
it
will.
You
know.
C
C
C
A
Yes,
yeah
yeah.
I
know
what
you
mean
now
like
like
why
a
recursive
call
well.
C
A
So
you're
like
if
array
is
array
cases
you
would
just
do
like
return,
find
slow.
Oh
that's,
really.
Smart
yeah!
I've
never
done
it.
That
way.
D
C
A
Right
yeah:
that's
you're
right,
yeah,
okay,
so
this
is
a
b
and
then
a
dot
slowest
dot,
time
minus
b,
dot
slowest
dot
time
and
then
because
it's
obviously
wrong.
C
C
A
How's
your
day
going
man
mine,
it's
good.
My
sister
was
anna
just
finished
her
bachelor
thesis,
oh
nice,
and
put
it
into
the
post.
Today
I
looked
it's
the
slowest
one
cool
jesus.
Why
isn't
it
like
sorry
for
the
bless?
For
me
I
know
you're
a
religious
guy
thanks.
I
just
meant
some.
I
just
meant
some
random
guy
in
america.
C
C
A
A
B
A
C
A
Oh
well,
okay,
touch,
dot,
get
ignore
right
and
we
can
be
like
hey
what
what
what
do
we
need
like?
We
would
definitely
want
to
ignore
node
modules
yep
to
get
ignore.
C
Yeah,
that's
a
good
idea
and
that's
what
you
know.
Here's
another
benefit
too,
with
you
know
letting
the
terminal
do
the
glue
code.
It's
just
so
then
you
have
one
place
that
all
of
these
you
know,
directories
and
stuff
good
reference
and
the
way
paths
are
what
what
do
you
mean?
Oh,
like.
C
C
I'm
probably
gonna
make
it.
I'm
probably
gonna
pipe
things
with
the
cli
later.
A
Do
we
have
I,
I
just
wonder
you
know,
because
so
you're
saying
mustache
okay
come
on,
you
know
I
did
all
the
things
my
way
I'm
like
mustache
npm
is
that
is
that
where
it
is
yeah.
C
There's
a
ruby
thing
too,
like
I
think
you,
I
think
you
already
have
it
like
on
your
cli.
How
would
I
have
it
in
my
cli
if
it's
like
in
your.
A
Brew-
it's
not
in
my
brew.
Why
should
it
be
in
my
blood
not.
C
A
A
D
A
A
What
we
can
do
here
is
like
public
output,
dot,
json,
oh
cool
yeah,
and
then
we
have
template
dot.
Mustache.
C
C
A
I'm
not
entirely
sure
so
this
is
so
and
how
is
a
do
we
have
like
iteration?
There
should
be
an
example
right
like
just
like
that:
no
yeah,
what
just
like
this
yeah,
that's
it,
and
so
we
we
we
just
go
in
here
and
be
like
hey
and
then
we
we
are
like
hey.
I
don't
know
lee
yep
lee
and
you
know
ul
oh
yeah
ul,
and
then
we
have
like
what's
his
name
template.
So
this
was
test
suites
right
yep
and
we
are
like
test
suites
and
then.
A
A
No,
no,
no
worries,
so
we
actually
can
do
like
yawn
and
then
we
just
do
no
mod
on
run
or
no.
You
know
what
I'm
yeah,
the
the
diabetes,
the
dot
bin
and
we
are
like
yan,
remove,
pug
and.
A
A
Oh
could
not
pause
view
as
jason
yeah.
That
makes
sense,
because
we
just
we
still
want
pug.
A
C
Nice,
I
am
so
freaking
excited
this
is
so
helpful.
So
what
is
the
slowest
I
want
to
see?
What's
the
slowest
one.
A
B
B
C
Cool
you
know,
I
I
see
it
being
pretty.
Oh
wow,
okay,
the
slowest
one
awards
handlers
for
sure,
the
slowest
one
that
shows
up
all
the
time,
but.
A
Is
it
these
timeouts
that
we
are
seeing?
Is
it
like
the
whole
suite
times
out
or
just
the
test
times
out?
It's
an
individual
test.
C
Gotcha
yeah,
it's
an
individual
test
times
out,
but
you
know
usually
what
that
means
is
that
we
have
to
refactor
the
whole
suite
or
we
have
to
refactor
the
whole
file,
yeah,
so
yeah
cool
and
then
we'll.
Let
peyton
get
crazy
with
the
styling
of
this
making
it
really
pretty
yeah
you're
right.
I
think.
A
I
think
that's
good,
like
that's
that's
good
right,
so
the
thing
that
we
already
could
do,
which
is
nice
just
in
order
to
like,
like
it's
like
thing
here
like
console
and
I'm
leaving
this
one
for
peyton.
C
A
This
is
the
only
data
that
that's
the
only
data
that
echo
success
fully
run
ran
our
build.
That's
the
only
there
that
that
I
would.
You
know
that
I
would
also
like
to
have
on
the
page
like
which
commit
are
we
talking
about
which
pipeline?
Are
we
talking
about
right?
So
this
is
also.
A
C
C
Traceability
yeah.
C
What
pipeline
did
this
run
on
what
commit
and
then
is
that
that's
about
it
right,
oh
and
when
probably
when
did
it
run?
That's
a
good
idea,
yeah.
So.
A
What
else
do
we
need?
It's
like
index.js,
like
hey,
readme,.
D
A
Need
to
add,
like
one
one
more
thing
and
just
one
thing
right
yeah,
so
let
me
just
delete
this
file.
We
don't
need
that
one.
We
don't
need
that
one.
The
rest
already
looks
important.
Now,
let's
just
like
prettier,
there
should
be.
Like
I
mean
we
basically
just
have
one
file
like
right.
A
Yeah,
it's
also
the
new
prettier.
You
know
the
one
that
you
don't
want
to
use
yet
there's
one
important,
there's
also
warframes.
I
think
it's
just
like
it
always
wraps.
If
you
just
have
one
argument
and
then
an
anonymous
function,
it
just
raps
them.
A
A
We
don't
have
any
further
tests
here
right.
So
we
can,
you
know
node,
I
mean
it
looks
okay,
build.
We
don't
need
to.
C
Separate
those
we
might
want
to
run
the
test
on
an
mr,
like
just
just
run
the
build
script
on
if
we
have
a
merge
request,
so
we
don't
end
up
like
breaking
master.
A
Or
maybe
yeah
yeah
yeah
you're
right,
so
we
have
public
here
here
we
do
actually
a
gcip.
So
it's
fine,
so
we
only
want
to
do
pages
on
main,
but
we
don't
need
to
test
script
because
we
don't
have
anything
to
test
yet
right
right,
we'll
just
test
the
build
that
makes
sense.
Okay,
yeah
so
and
oh,
this
is
a
bit
weird.
Why
is
it?
Is
it
like
that,
like
this
should
be
like
that?
This
should
be
like
that.
A
D
A
A
I
think
you're
right.
The
only
thing
that
I
really
like
and
what
I
wanted
to
do
is
like
I
had
this
cat
right,
webpack
memory,
metrics
and
I
want
to
be
like
I
really
like
this
unofficial
shell
mode
so
in
case
something.
C
A
Yeah
you're
right,
we
need
build
yeah,
we
need
build
and
there's
another
thing
that
we
should
do.
I
mean
I
don't
think
it's
a
big
problem
here,
but
it's
like
ci
jamo
reference,
it's
a
thing
that
we
don't
do
yet
at
gitlab,
but
that
I
really
like
and
it's
default
as
default
default,
yeah
global
defaults
and
what
I
really
like
to
do
is
I
don't
know
why
I
did
put
that.
Oh
yeah
see
we
even
have
like
a
nice
yarn
cache
here
in
case
we
ever
update
the
version.
A
12
18
already,
we
probably
even
could
do
14,
but
the
thing
that
I
wanted
to
do
is
with
artifacts
and
in
artifacts
it
would
be
cool
yeah.
So
we
have
expire
in
yeah,
so
yeah.
Let's
get
idea
so
like
it.
It
would
be
like
artifacts
expire
in
that's.
A
B
A
A
Yeah
now
it's
valid
git
check
out
minus
b
x
c.
I
maybe
let's
run
prettier
again:
git
commit
minus
a
minus
minus
amend
and
oh
no,
no!
No,
we
definitely
don't
want
to
do
that.
I
don't
want
to
amend
like
we
just
want
to
say,
like
hey,
properly
indent
cash
key.
C
C
A
This
is
the
problem
because
we
use
that
we
use
that
xml
puzzle.
So
what
was
the
other
one
fast?
Xml
parser,
no.
C
A
You
know
what
index
const
parser
right,
frustrating
you
know
on
the
plus
side
is
like
yarn,
add
fast
xml
parser
yarn
remove,
what's
the
other
one
xml
to
json
yep
and
we
can
just
be
like.
Oh
what
does.
B
A
C
Get
traversal
object
like
yeah,
I
guess
get
and
that's
really
cool
get
traversal
object,
and
so
this
is
going
to.
Let
us
actually
do
it
in
a
more
optimal
way.
Let's
just
convert
it
to
json
for
right
now,
but
I
think
it
traversal
object
is
going
to
let
us
it's
not
going
to
copy
all
the
data
over.
It
just
lets
us
now
actually
traverse
it.
So
we
can
do
our
parsing,
like
like
we
were
that'll
significantly
save.
C
A
C
D
C
No,
I
meant
the
last
one.
Sorry
if
you
go
down,
oh
no,
this
is
json
json,
never
mind.
I
read
that
wrong.
C
A
A
C
Library
bash
built
see
what
happens:
oh
lots
of
pipelines,
so
those
are
all
successful
pipelines.
A
I
think
you
know
array
mode.
True
is
probably
the
thing
that
we
want,
but
to
be
honest
like
let's
be
like
hey,
maybe
we
just
move
it.
You
know
pause
xml
right,
oh
no,
pause,
test
dodge.
No,
it's
fine
right,
pause
and
and
extract
pause,
junit
and
extract,
and
we
just
have
like
the
xml
here
right.
A
C
C
So
sometime
when
you're
feeling
froggy
yeah,
you
should
you
should
check
out
the
way
the
way
that
dino
like
suggests
handling
its
dependencies,
because
your
dependencies,
you
import
by
a
url
and
there's
no
like
package
json
or
anything
if
you're
working
like
how
do
I
then,
like
maintain
that
I
have
like
you
know,
I'm
using
the
same
package
project.
A
Obviously,
because
we're
piping
right,
so
I
need
to
call
the
note
the
script
directly
test
suite
chest
suite,
so
it
actually
looks
like
you
know,.
A
This
is
undefined,
so
they
definitely
it's
like
this
one.
But
theoretically
the
test
suite
already
should
have
attributes
and
it
doesn't
have
any
attributes.
So
my
assumption
would
be
you
know
it's
just
empty
empty
strings,
because
it's
not
pausing
the
attributes
right.
This
is
so.
This
is
bogus
ad
pass
attribute
value.
B
C
C
A
What
why
doesn't
it,
you
know
ignore:
ignore
attributes
false.
C
A
D
C
A
A
Well,
hit
commit
minus
a
out
xml
parser.
C
Since
you've
ran
it
a
couple
of
times,
do
you
want
to
add
a
job
or
add
a
package.json
script
for
print
the
prettier
command
you're
running.
A
A
C
The
that
job
failed,
it
failed
so
easy
to
find
gitlab
tokens.
A
Yes,
that's
good,
that's
good,
right,
right,
so
settings,
so
the
questions
like
which,
which,
which
token
do
we
define
here-
and
this
is
definitely
where
I'm
going
to
pause
the
share
for
a
second
so
yeah
here
we.
A
Go
I'm
wondering
like
we.
We
definitely
oh
shoot.
What
what
am
I
doing
like
what
yeah
I'm
going
to
find?
Like
a
token,
that's
that's,
okay,
repository
yeah.
Do
we
use
the
the
robot?
A
C
D
A
So
I
think
we
want
to
run
it
at
the
27th
minute
right
generally
so,
and
every
hour
right.
A
Why
not
it's
random
yeah,
oh
cool
it
built
it
successfully,
so
we
can
run
it
in
the
27th
minute
utc
and,
to
be
honest,
like
hey,
this
is
probably
enough
if
we
run
it
from
one
till
seven.
A
Okay
next
run
in
52
minutes,
so
that's
actually
smart
because
it
doesn't
run
before
the
merge
request
is
done
right,
but
the
quick
thing
that
we
can
do
is
we
can
check
check
the
artifact
of
the
build
job.
A
Oh
wow,
do
you
see
that
that's
the
complete
thing,
so
the
complete
thing
took
17
seconds
right.
C
But
you
you
see
like
like
there's
some,
so
what
would
then
be
really
cool
is
have
something
you
know,
another
smart
layer
on
top
of
this
to
know
like
here's,
here's
our
heavy
offenders,
but
then,
if
there's
a
new
offender,
that
kind
of
approaches
and
like
like
getting
some
notification
of
that
or
like,
if
there's
not
an
issue
existing
for
this
kind
of
that,
that
would
be
another
really
cool.
Yeah.
A
You
know
what
the
cool
thing
is
we
could
do
now,
because
we
also
saved
the
jason
away.
We
actually
could
get
the
five
last
runs
or
the
five
last
times
we
built
that
thing
or
we
could
extend
it
to
you
know,
get
the
json
artifacts
of
the
five
last
runs
and
actually
show
us.
You
know
the
average
on
the
last
five
runs
right
yeah.
That
should
be
really
easy
to
do.
C
Right,
I
think
I
think
probably
an
even
smaller
iteration
would
be
we
build.
We.
We
build
the
public
thing
from
this,
but
then
we
could
also
use
the
json
and
make
sure
that
we
have
issues
created
for
each
one
of
those
files
with
a
certain
label.
A
Yeah,
but
that's
also
why
I'm
like
hey:
let's:
let's
you
mean
that
you
that
you
have
a
script,
that
you
can
run
that
you
get,
that
gets
the
json
and
creates
issues
for
the
ones
that
are
over
a
second
or
something.
C
Yeah
that
would
be,
and
then
we
we
don't
create
the
issue.
If
that
issue
already
exists
like
for
that
file,
we
could
we
can
parse
that
somehow,
like
that'd,
be
really
cool.
The
next
step
here,
though,
is
definitely
to
change
that
junit
config.
That's
one
thing.
A
A
Yeah
yeah
so
yeah,
so
that's
also
funny
because
the
slowest
test
you
know
the
test
name
already
contains
like
thing
so
yeah.
I
I
agree
with
the
just
config:
it's
it's
nice
too,
that
we
can
use
the
file
path.
Oh
the
old
note
spec
what
it
took
a
second
and
it
didn't
do
anything.
C
The
the
individual
tests
won't
necessarily
add
up
to
the
total,
because
the
the
total
test
sometimes
has
like
justice
and
bootstrapping
stuff
that
it
doesn't
use
to.
C
Test
setup,
script
and
importing,
and
we
do
lots
of
stuff
on
import,
sometimes
that
that'll
all
affect
things
before
we've
even
started
tracking
an
individual
spec
yeah,
but
yeah.
This
is
so
freaking
helpful,
really
appreciate
it.
So.
A
You
know
what's
annoying,
though,
and
what
we
probably
should
do.
I
I
I
like
the
format
that
you're
saying,
but
I
think
we
should
log
every
spec
that's
over
a
threshold
right.
So,
for
example,
here
in
the
awards
handler
you
you're,
like
hey,
you
know
it
took
21
seconds
in
total,
but
it
could
be
that
there
are
five
more
tests
that
took
three
and
a
half
seconds.
You
know
what
I'm
saying:
it's
like
yeah.
C
And
that
makes
sense,
I
I'm
and
I'm
less
concerned
about
the
total
time,
I'm
more
concerned
about
that
3.7
seconds
time.
Yeah.
That's.
A
A
C
A
For
example,
if
you
look
at
this
right,
it's
like
hey
alert
management
table
yeah,
and
so
this
is
the
reason
how
they
consume
like
stuff
right
and
so
with
this
file.
Maybe
if
we
would
split
it
into,
we
could
write
our
logic.
Hey,
let's
try
to
get
that
json
file
where
we
have
just
you
know
the
length
of
all
the
tests.
A
C
A
really
I
like
that,
I,
like
that,
a
lot
yeah.
I
think
I
think
it's
a
lot
of
stuff
that
we
can
improve
upon.
That's
that's
interesting
about
grouping
tests
that
take
a
similar
time,
because
that
can
help
your
fast
ones
go
really
fast.
A
C
Have
the
equal
length-
oh
that's
interesting.
Okay,
I
was
trying
to
thinking
of.
I
was
thinking
of
like
this
example.
You
just
highlight
it's
like
why
in
the
world
is
that
taking
14
seconds?
But
maybe,
but
you
know
these
are
here's
what's
scary
too.
These
are
unit
tests
and
this
unit
test
takes
point.
C
Seven
seconds
and
unit
test
is
where
I'm
getting
all
my
value
coverage
from
like
you
could
easily
have
20
unit
tests
for
a
single
subject
and
if
you're
at
the
0.5
second
per
test,
you
know
you're
looking
at
10
seconds
for
the
whole
suite
without
any
kind
of
setup
time,
and
we
have
so
many
singletons
in
our
app
that
I
know
like
a
lot
of
the
and
that's
one.
This
is
a
huge
downside
too,
with
I
think
all
the
singleton
stuff
that
we
do
just
every
single
test
file
has
a
whole
new.
C
A
So
you
know
you
know
what
what
that
brings
me
back
to
it's
actually
like
the
thing
that
you're,
also
interested
in
that
we
currently
don't
show,
is
total
time
right.
This
is
the
total
time,
so
the
total
time
you're
also
interested
in
test
count,
which
is.
A
I
love
it,
and
this
is
just
like:
hey
average
is
like
so
you.
You
would
be
like
time
like
time
time,
arg
and
tests
like
tests
arc,
and
then
you
would
be
like
hey
const
time
equals.
C
That
is
highly
a
stylistic
preference
but
yeah
that
that
average,
though,
isn't
going
to
be
completely
accurate,
because
that
includes
all
of
the
like
startup
stuff.
So
you
could
end
up
in
a
really
weird
situation
where
the
average
is
greater
than
the
slowest.
A
Yes,
no,
I
know
so
you
would
basically
would
be
like
hey
average,
and
then
we
just
it's
a
rate
over
the
test
cases.
Yeah
we'll
we'll
need
to
do.
C
We'll
need
to
sum
find
find
some
of
test
case
with
the
tab.
Yeah.
A
Something
like
that
and
then
you're
like
average
length,
it's
like
it's
like
this,
like
function,
yep
and
then
cases,
and
then
it's
just
like
we
just
copy
this
bit,
because
it's
smart
right
and
here
reduce
it's
just
like
some
cur
and
then
was
it.
What
is
it
like
a
current
and
then
we
just
do
sum
plus
current
number
current
time
right
and
then
we
do
zero
and.
D
C
C
But
we
really
want
to
we.
What
we'd
want
to
do
if
we're
being
just
extra
finicky
is
add
a
guard
for
if
cases
is
an
empty
array
and
just
returning
zero,
because
we
don't
want
to
divide
by
zero
and
blow
up
for
some
because
we
actually
have
where
we
do
this.
We
pass
an
empty
array
actually
to
here.
A
It's
like
add,
average
and
test
count
to
the
output.
It's
also
funny.
You
know
that
we
are
like
hey,
let's,
let's,
oh
no!
No!
I
don't
want
that.
I
want
that
that
we
are
like
hey.
Let's
pause,
the
test
argument.
Instead
of
just
taking
the
test
case
length.
A
C
A
Yeah,
so,
oh
god,
git
rebase
minus
I
and
then
it's
original
main.
B
C
So
one
once
extreme
side
note
like,
since
we
were
talking
about
it,
because
I
was
selling
it
to
you,
yeah
with
dino
you
import
based
on
a
url,
and
so,
if
I
want
to
have
like
okay,
I
have
multiple
files.
Now
in
my
project,
how
do
I
make
sure
I'm
importing
from
the
same
third
party?
C
They
don't
have
like
a
package
json.
What
they
suggest
doing
is
having
a
dependencies
module
that
you
kind
of
it's.
It's
basically
forces
you
to
do
this
adapter
pattern
for
every
every
dependency.
Where
you
do
this
import
export
thing,
which
is
what's
really
cool,
is
oh
I've
imported.
I
bumped
a
version,
but
now
that
I've,
you
know
kind
of
been
forced
to
do
this
adapter.
I
can
actually
just
fix
that
api
difference
and
my
dependencies
module
as
opposed
to
like
having
to
you,
know
unbox
throughout
my
entire
code
base.
C
However,
I've
was
coupled
to
the
previous
api,
which
kind
of
came
up
when
we
were
doing
when
we
were
converting
xml
to
json
to
the
fast
xml
parser.
We
could
have
ended
up
not
touching
any
kind
of
our
main
application
code,
just
changing.
How
do
I.
C
C
What's
interesting
is
how
dino,
like
kind
of
forces
you
to
and
it's
it's
just
a
really
interesting
paradigm,
I
would
suggest
checking
it
out.
A
A
D
A
A
Also
be
interesting:
how
much
does
your
slowest
test
in
that
file?
You
know
deviate,
because
that
tells
you
a
lot
right
like
hey,
because
if,
if
you
like
have
an
average
of
0.4
but
the
longest
one
took
0.45,
it
actually
means
that
hey.
This
is
probably
like
fine
right,
because
you
just
have
a
bunch
of
unit
tests
or
whatever
you
know
yeah
well
like
this.
One
is
also
like
54
tests.
Average
90
milliseconds
is
that
90
minutes.
B
C
That's
what
that's
interesting,
because
you
know
you
could
end
up,
because
when
unit
tests
are
fast
like
they're
really
fast
like
when
unit
tests
are
fast,
it's
like
0.01
milliseconds
is
very
possible,
but
when
they're
slow
like
so
you
get
a
huge
spread
really
an
average
average
is
gonna,
be
tough
because
you
will
get
a
huge
spread.
I
I
think
another
another
interesting
thing
to
capture
here
would
be
like:
let's
just
see
how
many,
how
many
test
cases
are
above,
like
a
certain
threshold.
C
D
A
Yeah,
that's
that's!
That's
all.
We
need
yeah
going
to
stop
to
share.
Oh
gosh.
We
were
here
for
one
hours
and
45
minutes,
hey.