►
Description
**Result:**
https://gitlab.com/gitlab-org/gitlab/-/merge_requests/27120
**Description:**
This pairing session's goal was to fix a pipeline failure for an old Jest migration MR. It turns out that the Karma specs were bumping into each other. Rather than dissecting how to fix the antiquated Karma spec, we opt to just move it to Jest right away.
**Highlights:**
1:20:00 - Retrospective and ideas on improving this huge spec (spoiler: attack the component)
A
All
right
we're
recording
we're
picking
up
an
mr
that
we
started
moving
things
over
to
jest
and
we're
gonna
see
what
happens.
I
can't
seem
to
close
this
box
anyways
alright.
So
this
is,
mr
that
jackie
started
a
month
ago,
had
some
weird
pipeline
failures:
weren't
able
to
start
it.
It
looks
like
we're
moving
something
over
to
jest
yeah.
B
Start
we
started
with
replacing
I
think
it
was.
Was
it
extending
the
local
view?
This
one
started
switching
to
shallow
mountain
okay.
A
A
B
B
C
B
A
Yes,
one
thing
to
keep
in
mind
now
that
we
have
the
merged
result.
Pipelines
is
that
rebasing
will
not
help
anymore,
because
every
pipeline
is
gonna,
be
a
merge
result
of
master.
So
even
if
your
read
base,
if
masters
broken
its
broke,
what
you
can't
do
is
just
trigger
a
new
pipeline
run
instead
of
rebasing.
But
if
you're
like
500
to
750,
commits
behind,
like
you
should
probably
still
rebase
cuz
I,
think
there's
other
when
things
against
ale,
like
I,
think
other
things
can
still
come
up.
If.
A
That
what
you,
if
you're,
like
many
many
commits
behind
you,
should
probably
rebase
if
you're,
not
that
many
commits
behind
and
something
unrelated
is
failing
trigger
a
new
pipeline.
Cuz
rebasing
isn't
there
because
it
is
a
good
thing
that
all
of
our
pipelines
are
in
sync
now,
which
I
think
we've
had
less
master
failures
because
of
that
maybe
different
experiences,
but
run
of
this
just
spec.
Let's
see
what
happens.
B
C
D
E
A
C
Let's
see
the
pipe
life
summaries,
don't
tell
you
anything,
useful
I
thought
they
would
at
least
show
the
bottom
of
the
failure,
but
they
don't
what?
Oh
you
need
here
yeah
when
I
just
looked
on
the
failed
jobs
tab,
that's
what
I
was
looking
at
and
two
of
them
were
artifact
failures,
but
the
carpet
I
went
looked
like
it
was
two,
but
it
actually
wasn't
good.
A
Yeah
I,
don't
really?
Oh
you
see
over
here
in
the
field,
jostad
yeah,
all
right.
C
A
A
A
B
B
A
A
It
has
a
path,
so
I
think
it's
deterministic
I.
Think
if
you
have
the
same,
commit
hash,
it's
gonna
be
deterministic,
but
it's
not
I,
think
it
does
some
sort
of
optimizations
based
on
what
I've,
selected
or
not
like,
like
if
I
add
of,
if
I
have
100
right,
has
the
app
set
line.
If
I
have
like
in
an
order,
a
bunch
of
directories
and
then
I
add
directory
Z
at
the
end,
it
may
put
Z
in
the
front
like
I
have
noticed
some
things
like
that,
but
so
this
pass
by
itself.
That's
great.
B
A
Thing
you'll
notice
with
Jes
is
just
like
spawn
just
spawns
processes
and
I.
Think,
basically
you
can
you
like
set
the
level
parallelization
that
you
want
it
to
deal
with
this
one's
passing.
I
still,
don't
feel
great
about
it,
but
let's
try
to
dive
in
see.
Maybe
what's
going
on
so
it's
it's
failing
to
resolve
a
sink
component.
Merge
train
position
indicator.
Let's
see
what
happens
if
you
just
I've
been
in
here.
Oh.
F
A
A
A
E
A
Feasibly
recreate
this
locally.
We
could
try
to
keep
picking
at
it
and
debugging
what's
actually
going
on
here,
but
it's
gonna
take
some
time.
I
know
we
could
solve
this
if
we
just
move
this
back
over
to
just
if
this
is
the
deterministic
failure,
then
let's
just
move
this
back
over
to
just
as
well.you.
A
G
A
Nope,
so
the
point
is
this
is
failing
this.
This
failure
popped
up,
probably
because
it's
very
closely
related
to
something
some
sort
of
side
effect
that
is
being
left
behind
the
other
spec,
because
that
says
what
karma
specs
can
do.
I,
don't
really
know
what's
going
on.
We
could
totally
take
time
and
try
to
dive
into
you
what
specifically
happening
here,
but
how?
A
B
A
Cool
down
I'm
gonna,
I'm,
gonna,
I'm
gonna,
stop
I,
don't
have
any
patience,
I'm
still
ready.
It
I'll
tell
you
if
it
fell.
Okay,
so
let's
try
to
move
this
over
I
think
I
think
that'll
be
fun
too.
So,
let's,
let's
see
what
happens
there,
but
before
we
do
that,
let
me
go
ahead
and
rebase
because
we
are
a
few
thousand
commits
behind.
So
let's
do
a
fun
rebase
I'm
still
in
this
habit
of
so
before
we
did.
These
merge
result
stuff.
A
B
B
B
B
A
A
A
G
A
A
F
A
F
A
B
A
A
Go
and
check
it
out.
That's
a
good
question:
let's
see
your
go-to
Jets
config.
We
should
see
these
aliases,
so
we
have
Jess.
You
see
it
takes
us
to
the
root
directory.
Spec
front-end
I
see
we
have
ok,
we
have
eg
Jess.
We
do
that's
great
all
right.
Let's
do
ET
Jess
thought.
I'd
use
that
one
before
nice
I
learned
something.
A
A
A
A
A
E
A
A
A
B
A
B
B
A
A
A
D
A
A
E
A
C
It
failed
in
the
same
sort
of
way
in
that
merge,
train
position,
indicator
thing
paste
in
a
zoom
chat
there,
but
it
failed
and
the
after
all
like
the
entire
sweet
path
and
it
failed
in
it
after
all,
but
that
heard
that
looked
same
as
the
actual
test
failure
on
CI
so
that
s
sounds
like
it's
like
something's,
not
yep,
and
it
eventually
fails.
But
in
the
non-deterministic
time
that's.
C
A
C
A
C
A
C
A
That's-
and
it
includes
my
home
directory
stuff,
I-
can
also
hover
over
this
and
I'll
show
it
or
over
here,
like
there's
the
folder
of
okay.
If
you
have
to
the
same
file
name,
then
we'll
start
post
cases
post
fixing
it
at
the
end
I
end
up
right-clicking
and
doing
copy
relative
path,
like
all
the
time
like,
if
I'm
looking
at
a
file
and
I'm
gonna,
run
it
locally
or
like
run.
C
C
A
D
A
Or
was
it
oh
yeah,
oh
I,
guess
we
would
catch
to
something
and
created
a
flash,
so
maybe
I
guess
it
wasn't
gonna
fail.
Let's
then
see
I'm
really
curious
to
see
I,
don't
even
know
if
we're
hitting
these
in
the
first
place.
A
That's
what
I
want
to
know,
because
if
we're
not
hitting
him
in
the
first
place,
then
I
need
to
then
I
know
it's
this
mat
on
Mount
to
think
that
I
need
to
be
concerned
about,
but
if
it's
like,
okay
yeah
we're
not
even
hitting
him
in
the
first
place,
so
yeah
just
now,
I'm
a
little
paranoid
so
double-check
you.
A
A
A
A
C
A
So
this
is
you
bringing
up
a
good
question
and
karma.
We
don't
fail
we
accident.
If
we
make
in
real
requests.
We
won't
think
we
just
there's
some
form
for
that
gets
thrown
out
and
we
don't
worry
about
and
it
slows
down.
Ours,
sweet,
okay
and
just
we
fail
if
we
try
to
make
an
unmarked
request,
we're
gonna
blow
up.
C
C
A
C
A
A
So
if
something
is
like
waiting
or
polling,
then
we're
gonna
we'll
try
to
hit
it
as
an
emphasis
that
you
really
needed
to
clean
yourself
up,
because
if
we
don't
have
these,
because
if
we
didn't
do
that,
we
didn't
have
specs
failing
that
like
this,
then
we'd
have
specs
actually
bumping
into
each
other
and
sure
it's
contained
in
one
file,
but
they
still
bumping
into
each
that's
what
we
want
to
avoid,
and
it
looks
like
this
and
karma
had
some
stuff
like
that
happening.
So
if
I,
if
I
add
these
back,
this
is.
C
C
C
A
C
A
A
Probably
add
something
to
her
Axios
the
log
when
we're
actually
calling
that
thing
just
get
the
stack
trace,
yeah.
A
D
C
The
integrated
just
debugger
and
Ruby
mine
is
really
nice.
Yeah.
D
A
A
A
A
C
A
A
So
my
hypothesis
is:
let's
wait
for
promises
first,
the
other
idea
is
we
could
we
could
wait
if
we,
because
there's
a
downside,
kind
of
with
that,
because
it's
gonna
slow
down
our
whole
test
suite,
because
every
test
we're
gonna
wait
for
everything
to
flush
which
we
should
probably
which
we're
kind
of
doing
it
with
the
timer
thing
anyways.
So
it's
probably
fine
I,
don't
know
what
do
you
think?
Do
you
think
this
is
a
problematic
fix,
or
do
you
think
the
other
idea
would
be?
A
A
C
See
I
just
see
a
wash
I
stepped
away
for
a
while
up
back,
so
the
there's
just
trade-off
between,
like
you,
could
just
globally
always
win
on
promises
in
every
after
all,
right
but
you're
saying
that
would
slow
things
down
a
lot.
So
we
compromise
for
speed
by
not
having
that
happen,
but
sometimes
you're
doing
things
with
back
cos
that
end
up
being
synchronous
because
of
that
and
they
fight
with
each
other
yeah.
C
Okay,
I
just
think.
Is
there
some
holistic
way
to
fix
this
once
and
for
all
yeah
once
and
for
all
without
it?
Well,
it
would
be
like
you
know,
always
wrap
everything
and
wait
for
promises
every
after,
like
hack
hack,
the
implementation
of
it
or
something
but
you're
saying
that
would
really
slow
things
down
the.
A
C
A
A
A
A
A
G
A
Yeah,
what
we
had
done
was
we
added
so
this
was
this
was
I
was
hoping
not
to
have
to
do
this,
but
we're
gonna
wait
for
all
of
our
requests
to
finish
before
we
clean
things
up,
so
we
are
gonna,
so
we
could
do
was
destroy
right
away.
That
would
be
nice.
We
could
destroy
then
wait
for
all
of
our
promises
to
finish
and
then
clean
safety.
A
That's
what
was
happening,
but
it
was
it's
not
nicely
the
Marcus.
In
my
opinion,
it's
that
our
component
is
lat.
We
have
it
has
code,
that's
lasting
what
after
we've
destroyed
it.
That's
really
scary
that
bothers
me,
but
moving
things.
Think
these
things
suggest
is
a
priority
and
I'd
rather
see
us
move
Jess.
This
is
my
personal
opinion
and
I'm
fine.
If
it's
a
little
slow
and
then
we
just
maybe
iterate
on
it
and
rewrite
it
using
view
test
details,
and
we
can
make
all
this
faster.
That
way.
A
A
A
We
could
do
that
and
that
would
be
that
would
be,
and
so
we
could
do
that
on
our
before
each
maybe
in
the
test
wait
for
moms.
Well,
we
have
like
our
when
it
is
loading.
I
think
this
is
kind
of
expecting
it
to
not
be
already
done,
I'm
just
for
fun.
Let
me
let
me,
let's
see
what
that
would
look
like,
because
we're.
A
A
A
That's
the
other
approach
so,
rather
than
doing
all
of
that,
I
was
kind
of
wanting
to
just
do
it
and
once
in
the
after
each
and
call
it
a
day,
I
thought
for
some
reason,
I
thought
we
were
actually
mounting
Tapani
here,
but
we're
not,
and
that's
a
good
thing,
because
now
we
can
mount
it
with
specific
properties
and
stuff.
But
the
other
approach
would
be.
A
Let's
wait
for
promises
here,
announced
it
that's
way
for
promises
after
he
mounts
those
wait
for
promises,
but
well
I'm,
already
touching
everything,
let's
just
move
it
all
over
to
PTSD
tails.
Oh,
this
sounds
like
out
of
scopes,
actually
just
plucking
something
from
Carmen
of
dropping
into
jest.
So
that's
that's
my
so.
A
I
would
do
that
and
I
would
even
I
would
even
do
that
and
drop
a
link
to
that
issue.
On
top
of
this,
wait
for
promises
and
say
like
don't,
do
this
like
we're
just
doing
this,
because
this
was
moved
to
my
moves
from
karma,
we're
gonna,
clean
and
open
this
issue,
because
people
are
gonna
copy
code
and
when
someone
sees
ho,
how
do
I
fix
this
problem?
A
They're
gonna,
look
at
this
code
and
be
like
oh
I,
just
need
that
wait
for
promise
just
after
each
and
that's
gonna
cut
off
issues,
but
we
can
I
think
I
think
we
can
wrap
this
up
and
in
five
minutes
you
guys
have
you
all
about
five
minutes,
yeah
all
right.
Let's
see
what
this
front!
Let's
see
this
next
one
is.
A
A
C
A
A
C
D
A
A
B
A
A
B
A
D
A
Great
does
that
look
right
yeah
this
sums
I
like
this
okay,
this
is
cool
all
right.
Let's
do
it
so
this
kind
of
creak,
I
wanna,
help
her
love,
seeing
it
I,
like
all
of
our
best
specs,
have
something
like
this.
It
seems
I
like
pure
functions.
They
don't
write
to
shared
variables,
but
it
makes
everything
super
readable
and
now
I
can
add
the
destroy
if
we
have
a
shared
variable.
A
A
A
B
B
A
Yes,
because
I'm
not
passing
this
thing
in
and
we
don't
actually
need
I,
don't
know
why
we're
storing
this
in
a
I
don't
know.
I
do
not
know
why
we're
storing
this
in,
like
a
variable
thing,
oh
well,
maybe
we'll
just
trade
it
out.
I!
Guess
because
don't
worry
about
that
point
because
we
didn't
ask
the
component
pardon.
A
F
A
A
A
A
F
A
A
A
We're
actually
gonna
just
do
I
would
suggest
we
could
just
do
mount
component
here
or
we
can
be
coupled
wait
for
promises
from
create
component.
Do
you
think
it's
to
just
do
the
mountain
component
like
it
used
to
be
right,
yeah,
so
I
would
just
do
the
regular
mount
component
here
like
we
used
to
have
it
and
then
say,
and.
A
A
A
Right
and
and
I
and
there's
ways
that
we
could
improve
that
and
I
think
it
would
require
rewriting
in
a
writing
the
code,
maybe
not
actually
the
code
but
like
there's,
you
can
mock
Axios
mock
adapter.
You
can
have
a
callback
that
doesn't
ever
resolve
like
you
could
do
things
there,
but
when
it
comes
to
these
jet
status,
things
I
want
to
see
the
most
profitable
thing,
how
it
move
as
quickly
as
possible.
A
First
rent,
some
people
like
they
go
all
out
and
they
go
ahead
and
move
in
to
view
test
details
and
they
make
the
test
really
nice
I,
so
I
have
I,
have
a
I
have
a
confession
and
I
kind
of
feel
guilty
about.
This
I
was
really
really
hoping
to
have
the
Jes.
It
is
finished
by
contribute
and
now
I
think
it
will
be
because
before
I
was
like
when
it
was
in
April
I
was
like.
Oh
man,
I.
A
F
A
Doing
special
dependency
scanning-
that's
another
really
interesting
topic
as
I
can't
use.
How
do
you
organize
your
specs
I?
Don't
I
personally,
don't
like
to
get
like
super
domain
heavy
with
these
unit
tests,
like
oh
I,
like
drop
in,
like
you
know
when
this
prop
is
this
like,
like
I
just
I
like
to
organize
based
on
the
state
of
my
component.
C
A
A
A
A
A
A
A
A
Okay
yeah,
so
it's
making
some
requests
and
it
might
be
that
we're
not
returning
a
so
I
think
the
wait
for
all
promises,
thing,
I,
don't
really
know
so.
Let's
do
next
take
and
then
that
and
then
we'll
do
a
wait
for
promises.
After
that,
let's
see,
if
that
helps
at
this
one
I
want
to
get
you
rid
of
a
ton.
Oh
no
I
get
very
little
speck.
A
I
passed
I'm
supposed
to
pass
a
function
and
to
hear
as
the
callback
so
I'm
saying,
wait
for
promises
is
the
souls
like
because
it
took
doing
it's.
It's
gonna
have
to
just
deal
I
think
it
doesn't
like
it
when
I
isolate
these
specs,
because
maybe
there's
a
lot
of
set
up
time
for
something,
and
that's
probably
good,
oh,
and
so
now,
right,
okay,
great,
that
was
perfect.
Okay
I
was
hoping.
A
G
A
D
A
A
Said
immediate
was
used,
I
think
to
wait
for
promises.
That's
what
before
we
were
using
a
set
timeout
and
I
think
that
was
used
to
try
to
wait
for
Axios
to
finish
doing
its
thing.
Just
could
it
should
have
been
a
code
smell
that
something's
not
right
happening
here,
but
now
we're
using
wait
for
promises
instead,
which
technically
could
call
like
said
immediate
I,
don't
really
know
what
it's
doing
under
the
hood
right
now.
F
F
A
D
A
A
We've
been
pairing
for
an
hour
and
a
half
now
really
close,
but
I
think
we
could
do
some
some
retro
and
takeaways,
and
you
know,
update
our
mr
asynchronously
after
going
through
this
and
gave
me
you
want
to
hang
on.
We
can
we
can.
We
can
see
this
I
try
to
unravel
this
to
the
end,
but
also
want
to
give
you
guys
a
chance
to
hop
off
I.
B
A
A
A
The
challenge
was
with
loading
ones,
that's
the
challenge
was
putting
it
on
the
create
component,
but
what
we
notice
is
we
isolated
the
failing,
specs
they
were
blowing
up
and
it's
because
they
were
dependent
on
these
other
ones
having
ran
already
or
like,
or
that
they're
asynchronously
getting
set
up
or
something,
and
so
we
were
trying
to
now
go
through
each
one
and
make
sure
deterministically
like
we
isolated
it.
It's
gonna
run
and
it's
not
depending
on
something
else
being
run.
A
First,
that's
what
we
found
when
we
ran
the
whole
when
we
did
it
on
the
after
each
it
seemed
like
the
components
were
dependent
on
other
tests
being
run.
I,
don't
know
if
that's
still,
gonna
be
the
case
or
not,
and
it
might
not
be.
A
It
might
still
be
the
case,
even
if
we
do
it
before
each
or
like
here
in
the
crate
component.
So
but
I
feel
like
this
is
a
huge
file.
It's
gonna
be
a
lot
harder
for
a
reviewer
to
review
that
all
this
went
through
like
if
we're
watching
all
of
this,
we
need
to
move
it
all
over
to
view
test
details.
So
it's
not.
It's
not
easy
for
us
to
change
in
a
thousand
line
spec.
A
A
C
A
C
A
C
A
A
Yes,
there's
lots
of
different
ways:
I
think
we
can
go
about
it.
I
think
either
way
we're
gonna.
Here's
another
benefit
to
moving
into
jest.
If
we
move
this
to
just
that,
we
know
this
isn't
gonna
bump
into
any
other
car
respects
that,
in
my
eyes,
increases
the
profitability
of
the
cost.
Yeah,
not
cleaning
everything
up.
A
So
I
would,
I
would
support
just
moving
into
just
you
putting
the
after
each
say
we
started
going
down
this
route,
but
let's
create
another
follow-up
issue
to
clean
this
up,
because
it
does
need
some
attention
on
that.
We
could
do
it
in
another
pairing
session
or
we
can
kind
of
hope
that
a
community
contributor
picks
it
up
there,
but
I
think
I'm
gonna
revert
what
we've
done
just
put
in
after
each
as
just
a
small
step
forward
in
the
right
direction
and.
A
A
A
You
right
what
and
get
a
yeah.
We
don't
have
that
great
component
helper
anymore
yep,
so
the
only
ones
that
are
failing
are
these
things
and
it's
just
because
they're
using
matches
that
only
actually
exist
in
the
just
world,
for
whatever
is
so,
we
only
have
five
failures,
but
the
reason
we
went
down
this
whole
approach
is
so
yeah
tracking
back
when
I
focused
on
one
of
these
failures,
it
blew
up
with
a
different
error
and
the
kind
of
error
was
like
hey.
A
We
couldn't
find
this
property
of
this
undefined
about
yeah
and
that
smells
like.
Oh
no,
like
this
spec
was
expose
dependent
on
another
spec
running
before
that's
what
we
are
trying
to
fix
by
I
think
if
we
did
the
wait
for
promises
on
the
Cray
component
level,
we
won't
have
this
coupling
but
I
I
kind
of
feel
like
we
need
to
address
allowables
holistically,
because
it's
really
really.
We
probably
need
to
address
it
by
splitting
up
the
component.
A
So
I'd
rather
do
this,
rather
than
just
looking
at
the
spec
and
saying
what
can
we
fix
in
the
spec
I'd
almost
rather
say
what
can
we
pull
out
of
here
into
a
separate
component
and
then
let's
move
that
bed
into
its
own
spec
and
then
let's
we'll
slowly
shrink
that
this?
This
is
kind
of
a
I'd
call.
This
a
guide
class
like
this
is
a
code
smell
where
we
have
some
sort
of
huge
manager
trying
to
manage
lots
of
things.
A
Yeah
that
that
will
probably
save
us
a
bit
of
time
too
so
really
interesting
stuff.
Another
thing
we
could
do-
and
this
is
I
like
this
bridge-
a
lot
is
move
this
out
of
the
mountain
I
think
this
is
a
top
level
component.
Let's
just
call
it
an
hour
right
before
we
set
up
our
store
or
whatever
we're
setting
up.
Let's
call
our
fetch
data,
and
that
makes
this
way
easier
to
test.
A
Yeah,
so
here's
the
deal
like
so
here's
the
thing,
but
this
pattern,
like
this
whole
component,
seems
like
it's.
Not
even
its
whole
component
seems
like
it's
not
even
viable
unless
this
passes,
which
tells
me
like,
maybe
we
shouldn't
like
maybe
I,
should
be,
should
be
props,
I.
Imagine
these
are
now
data
attributes
or
something-
and
like
tells
me,
why
am
I
even
letting
this
component
exist
if
it
hasn't
passed
like
this
really
is
like
a
responsibility
to
whoever's.
Creating
me.
F
F
F
A
A
A
I'll
update
that
mr
I'll
post,
this
video
on
get
lab
unfiltered
and
include
that
Mr
there
too,
but
thanks
Jackie
and
thanks
Chad
for
hopping
on
this
was
super
helpful
and
I.
Think
there's
a
follow-up
issue
to
be
made
here
as
well
and
I'll
create
that,
but
thanks
this
is
fun.
You
guys
have
a
great
rest
of
your
day.
Thanks
hi.