►
From YouTube: Frontend Pairing - Discovering missing JSDOM APIs that didn’t allow to test Toast UI in jest
Description
In this frontend pairs session, we investigate why writing tests that use the Toast UI dependency fail in jest. We discovered that we could remove some DOM API stubs because JSDOM already provides those APIs in the currrent version. We also had to stub others like some methods in the DOMRange class.
A
Already-
and
I
I
did
just
close
all
of
my
browser
tabs-
so
I've
lost
it
and
firefox
is
not
starting
for
me.
Oh
no,
it's
all
the
way
over
here.
All
right.
I
was
doing
something
else,
so
let
me
find.
Is
it
assigned
to
me
that,
mr
oh?
No,
let
me
send
you
the
link.
A
A
This
and
this
and
the
thread
would
be
cool,
cool,
cool,
derek
and
chad.
Are
you
familiar
with
the
with
the
situation.
C
Kind
of
basically
I've
been
working
on
a
lot
of
the
custom
renders
not
gonna
think
so,
I'm
familiar
with
the
code
itself,
but
from
the
testing
perspective,
that's
basically
what
I'm
here
is
just
kind
of
be
a
fly
on
the
wall.
Okay,
my
goal.
D
C
A
A
Yeah
so
the
goal,
because
and
and
the
mr
noticed
that
we
had
to
kind
of
extend
one
of
toast
ui's
like
core
classes
for
rendering
stuff
and
were
a
little
bit
coupled
to
some
of
their
implementation
behavior.
So
it's
like
okay,
let's
just
do
a
different
level
of
testing
coverage
and
get
some
actual
like
input
output
coverage
of
like
given
this
markdown
or
it's
given
this
html
input.
What's
what
do
we
expect
the
markdown
output
to
be?
B
But
basically,
what
we're
doing
now
is
we
are.
We
are
testing
specifically
the
html
to
mark
the
frame
markdown
renderer.
So
the
idea
is
that
we
created
some
custom
renderers
that
are
changing
the
way
that
we
are
generating
markdown
for
list
for
some
formatting
preferences,
like
stronger
emphasis,
and
that
that
test
is,
you
know
attaching
that
service,
that
those
custom
renders
to
the
actual
toast,
ui
editor
and
then
using
the
they
said,
html
method
to
say
the
html
and
get
the
get
markdown
method
to
get
the
generated.
Markdown.
A
Yep
yeah,
and
so
what
I
love
about
these
kind
of
tests
is,
you
could
see,
you
could
feel
how
this
can
just
be
easily
parameterized
and
you
can
just
and
then
it's
almost
like
you
know,
in
a
larger
company,
you
can
have
like
a
requirements
engineer
that
just
adds
new
input,
output
specs
for
this
and
yeah.
This
is
this
is
really
looking
really
nice,
okay,
but
it
doesn't
work
and
that's
what
we're
doing
so.
A
Let
me
open
up
the
thing
and
check
out
the
branch
and
it
doesn't
work
because
do
you
want
to
share
why
it's
why
it's
failing
in
regain.
B
Yes,
when,
when
we
run
the
test
in
guest,
apparently
there
is
either
toss
ui
or
one
of
the
dependencies
for
optos
ui.
B
First
explain
what
toast
ui
is,
so
those
ui
is
a
it's
a
layer
on
top
of
two
editors
code,
meter
and
square,
that
is,
average
content
editor
and
what
those
ui
does
is
creating
a
bridge
between
converting
pretty
much
between
converting
the
html
from
a
rich
contaminator
to
the
raw
markdown
that
is
displayed
in
code
mirror,
and
this
is
the
use
case
that
we
are
using
right
now
from
that
tool.
B
A
Yeah
and
I
think
we're
going
to
be
spelunking
and
the
in
toast
ui's
code
a
little
bit
so
this
will
be.
This
will
be
interesting,
yeah,
so.
D
Clarify
is
this
a
test
of
our
extension
code
or
it's
intended
to
be
more
of
an
integration
test
of
the
the
hold
host
behavior.
It
seems
like
it's
the
first
one.
D
A
Cool
yeah,
so
it's
failing
and
yeah.
You
could
even
promote
this
integration
up
a
few
levels
too
and
like
test
at
our
ui
level,
like
when
the
user
inserts
this
html.
What
do
we
do
and
but
I
think
right
now-
this
is
this-
is
a
pretty
good.
This
is
a
pretty
good
level,
so
yeah,
let's
just
un-ops
funkate
this
I'm
joking,
that's
going
to
be
ridiculous,
looks
like
we
have
save
range
to
bookmark.
A
And
I
I
was
looking
this
up
too
over
here.
There's
someone
creating
an
issue
here
about
getting
toast
ui
to
work.
This
looks
like
it's
an
maybe
for
a
different
issue,
but
someone
mentioned
something
about
range.
It
looks
like
range,
doesn't
have
support
and
js
dom,
but
it
doesn't
mean
we
can't
like
make
our
own
mock
range
thing
and
that's
the
kind
of
thing
I
would.
A
I
think
we're
going
to
end
up
doing
and
given
that
we're
doing
something
like
save
range
to
bookmark,
I
think
that's
kind
of
what
is
going
on,
but
I
want
to
really
spelunk
in
the
toast
ui
code
itself.
What
do
you?
What
do
you
all
think
of
that.
D
That's
what
I
tend
to
do
and
like
if
I'm,
if
I
know,
I'm
going
to
be
really
going
deep,
I'll,
even
try
to
use
in
my
ide
the
the
uncompressed
just
original
source
version,
and
then
you
can
separate
points
and
everything
and
step
through
it
too.
A
You
know
it's
it's
it's
funny.
How
helpful
source
code
is
like
it's
even
more
helpful
than
documentation,
sometimes.
D
Right,
that's
what
I
had
to
do
like
figure
out
how
to
do
the
monorepo
for
the
middleman,
just
get
their
source
code
and
debug
through
it
for
hours
to
figure
out
what
was
going
on.
A
Yeah,
okay,
so
all
right.
So
this
is
the
same.
This
is
the
right
thing
and
we
can
also
just
check
that
we're
on
the
right
version
too,
but
and
that
might
be
a
good
idea-
toast
ui
enter
2.2
2.2.
Oh
that's
like
the
latest
version.
Oh
man,
okay,
all
right!
So
then
I'm
gonna
search
for
this
save
range
to
bookmark
thing.
F
A
A
B
No,
but
apparently
they
have
a
copy
of
the
source
code
in
the
repository
or
is
it
we
can
go
to
there.
It
is
an
independent
package.
You
can
find
you
can
type
in
google
esquire
rich
editor
and
you
can
find.
A
A
But
then,
if
I'm
not
finding
anything,
then
we'll
figure
it
out.
Oh
yeah,
this
is
a
malt.
This
is
a.
This
is
a
mono
repo.
So
here
is
oh
yeah.
They
have
this
two
mark
thing.
I'm
not
even
seeing
the
editor,
though,
where
does
that
come
from.
F
A
But
it
looks
like
with
squire.
The
first
thing
we
hit
is
we
do
a
new
squire
thing?
Do
we
know
what
squire's
supposed
to
do.
B
The
squad
square
is
the
the
rich
content.
Editor,
that's
what
that's
where
the
user
types
the
or
creates
a
rich
content,
and
it
converts
it
to
html.
A
Okay,
cool
yeah,
let's
check
out
squire,
it
looks
like
that's
the
bit
that
we
actually
don't
have
support
for.
Let's
check
that
out.
A
A
Yeah,
that's
what
it
seems
like,
but
when
I
look
up
when
I
look
up
the
package.
G
I'm
not
getting
anything,
I'm
pretty
sure.
Squire
was
second
to
the
bottom
of
the
last
package.
A
File,
you
looked
at
yeah
and
I
saw
that
on
the
when
we
were
here,
we
went
to
libs,
I
saw
squire
and
I
think
I
think
this
might
be
related
to
it.
But
let's
see
is
this
the
same
thing.
This
is
yeah.
They
have
a
whole
copy
of
the
man,
so
much
code
out
there
all
right.
A
B
A
Maybe
they
copied
some
of
their
dependencies
down
or
something
so
yeah.
That
was
a
mistake,
but
this
is
squire
cool
and
we
are
interested
in
because
it
looks
like
there's
a
class
that
you
can
extend.
That's
what
they're
doing
over
here
in
the
squire
extension-
and
this
is
the
bit
that
I'm
really
interested
in
is
this
class.
A
A
Okay,
so
I've
created
it,
we
start
doing
some
wysiwyg
editor
init
thing:
oh
yeah,
then
we
call
set
html
here.
F
A
A
A
A
A
Yeah,
okay,
so
range
is
a
range,
is
a
thing
cool
and
it
looks
like
then
we
can
also
clone
a
range.
I
guess.
Okay,
all
that
makes
sense.
So
why
would
then,
if
we
have
a
range,
why
would
we
not
be
getting
a
like
a
node
type?
So
if
I
go
to
my,
if
I
go
back
to
my
oh
gosh,
save
range
to
bookmark,
oops.
A
Oh
we're
doing
something
for
all
of
our
child
nodes.
So
I
wonder
if
it
is
insert
node
and
range
where
we're
doing
oh
yeah.
G
A
Arrange
that
start
container-
oh
yeah,
all
right
and
yeah-
there's
no
way
this
jsdom
has
any
idea
what
to
do
with
this.
I
think
so,
let's
see
when
I,
when
I
just
ran
it
here
and
I
had
a
range
I
think
that
was
actually
over
here
yeah.
It
was
a
real
thing
just
for
fun.
Let's
see
what
happens
when
I
do
it
over
here
before
actually
doing
anything.
A
A
Yeah,
so
I
did
fit
so
that
we
were
just
running
this
one,
because
it's
force
f
is
short
for
force,
this
specific
test
and
yeah,
it's
undefined,
which
is
not
what
happens
when
I
just
create
one
in
a
real
browser
environment.
So
this
is
we've
discovered.
Jsdom
does
not
have
proper
range
support,
and
that
might
either
be
because
we
started
implementing
our
own
range
support
and
hopefully
that's
not
the
case
or-
and
we
didn't
you
know
finish
all
of
it.
Let's
see
if
we
ever
call
this
create
range.
B
A
Nope
that
wasn't
it
take
records,
oh
we're
so
close,
though
I
can
feel
it
at
modify
document
take
records.
So
this
is
another
squire
thing,
so
another
approach
here
would
be
like.
If
we
feel
like
squire
by
itself
is
the
is
the
complication,
maybe
there's
a
we
can
mock
it
at
the
squire
level.
A
If
it's
very
clear
what
that,
if
that
responsibility
is
auxiliary
and
like
we
don't
really
need
it
for
this
case
or
if
it's
very
clear
what
we
can
replace
it
with,
but
I
don't
I
mean
I'm
looking
at
squire
right
now.
It
looks
like
a
lot
of
stuff,
so
I
don't
really
know
what
I'm,
what
I'm
doing,
here's
the
squire
extension
and
modified
document.
I
keep.
D
So
I
followed
that
comment
about
jsdom,
not
supporting
it
and
ended
up
at
a
request
that
says:
they've
implemented
the
range
and
selection
apis.
So
maybe
we're
in.
G
D
As
of
december
7th,
so
maybe
we're
just
not
using
the
latest
version
yeah.
I
can
link
that.
A
Yeah
we're
using
something
really
weird
so
we're
using
the
issue
I
found.
Do
you
know
what
version
it's
that's
supposed
to
be
because
we
are
using.
A
You
see
it's
hardcoded
16.,
so
I
don't
know
if
we
knew
what
version
we
need
to
bump
to
that
would
be
cool,
but
then
we
also
run
into
if
we
bump.
You
know
if.
B
A
B
By
the
way,
paul
probably
something
that
we
also
could
do
is
evaluate
that
custom
environment
class.
So
we
have,
if
we
perhaps
implemented
the
custom
range
fake
object
that
we
have
there.
We.
G
A
Yeah,
we
should
there's
a
lot
of
cleanup
that
needs
to
happen
to
this
class
because
we're
doing
tests
we
have
tests
set
up
here.
We
have
another
file
called
test
setup
where
we
do
more
test
setup,
and
I
think
we
really
should
be
environments
are
the
way
we're
supposed
to
be
doing
stuff.
A
I
think
use
just
this
environment
thing
is
way
more
configurable
than
our
like
global
test
setup
thing,
so
we
really
need
we're
not
taking
as
much
advantage
of
some
of
this
as
we
could
be,
which
we
do
need
to
do.
One
thing
I
discovered
too,
with
all
this
while
we're
talking
about
it,
so
this
is
a
this
is
something
that
I
added
a
handful
of
days
ago,
but
like
anytime,
we
have
a
component,
that's
like
based
on
our
window.location.
A
We
always
do
this
like
really
every
test.
Does
this
like?
Okay,
I
gotta
create
a
property
on
window.location
to
return
specific
props,
because
you
can't
just
assign
to
window.location,
but
jazzdom
actually
has
baked
into
it
like
ways
to
do
this.
A
You
know
native.js
properties
that
you
need,
so
we
have
not
been
taking
as
much
advantage
of
this
environment
and
js
dom
as
we
really
could
be
and
yeah
one
one
thing
to
do.
That
is,
if
you
find
yourself
mocking
window.location,
specifically
consider
using
global
dot,
dom
dot,
reconfigure
and
it'll
it'll
set
up
all
those
props
for
you,
and
it's
really
it's.
A
D
D
The
library
just
dash
environment
dashjs
looks
like
it's
using
1621,
which
was
like
five
months
ago
and
this
hit
in
december.
It's
like
it's
likely
that
maybe
it
didn't
make
it
in
it.
I
don't
know.
A
Yeah
well,
I
was
surprised
I
think,
something's
changed
like
the
fact
that
we
were
mocking
this
and
then
removing
it.
And
now
it's
just
working.
I
feel
like
something
is
something's
bumped
up
and
we
now
have
more
support
than
we
thought
we
did,
which
is
good,
but
I
I'm
not
sure
what
this
take
records
thing
is
coming
from.
It
might
be
the
same
thing
and
if
it
seems
like
it's
more
dummy
stuff,
then
maybe
we
need
to
consider
boosting
this
even
more.
This
isn't
really
a
huge
library
like
we
need
to.
A
If
we
wanted
to
just
do
this
ourselves
and
make
it
a
very
specific
tweak
to
it,
we
could
as
well
yeah.
Let
me
see
what
let
me
see
if
I
can
find
would
take
records
or
if
anyone
else
wants
to
where
that's
coming
from
it's
coming.
When
we
call
modified
document-
and
I
guess
that
comes
from
the
squire
stuff-
I
lost
the
squire
stuff.
Oh
no,.
B
I
found
a
reference,
but
in
the
order
you
know
it's
quite
repro.
I
guess
it
should
be
also
in
those
ui,
because
it
is
a
copy.
C
I
basically
assume
line
193
is
where
your
take
records
is
happening.
C
A
A
But
this
is
like
a
global.
Is
this
actually
like.
B
A
D
A
Right,
I
might
be
able
to,
we
might
be
able
to
do
it
like
just
here,
but
that's
going
to
cause
issues
for
other
people.
A
I
really
need
you
to
do
this,
so
the
other.
The
other
thing
is
it's:
it's
failing,
because
we
don't
have
take
records
all
right,
and
so
we
have
a
mock
for
mutation
observer
and
I
think
we
just
haven't
implemented,
take
records
for
it.
A
Yeah,
where
is
our
mock
for
mutations
over?
Oh
man?
I
wonder:
if
do
we
is,
I
didn't
think
json
actually
gave
us
one.
So
now
I'm
really
curious
where
that's
coming
from.
Oh,
you
said,
though
they
did
one
in
like
13
or
something
so.
A
This
is
something
that
we
have
done
so,
let's
what
is?
We
have
not
fully
done
our
stuff.
I
think
I'm
gonna,
because
we
actually
have
a-
and
this
came
up
I
think
recently
in
the
mr
review.
We
have
a
real
stub.
H
In
js,
dom
13
2
can't
we
just
comment
this
out
and
we
already
know
that
you
bring
up
a
good
point:
you're,
probably
right.
Let's
just
try
that
out
I'll.
D
A
A
A
That
was
scary,
so
we're
finding
that
range
that
get
bound
in
client
rect
is
not
function.
D
So
what
is
the
range
we
have
now?
Is
it
a
real
range
or
is
it
a.
A
Mock
range
that
this
is
talking
about,
this
is
going
to
be
the
js
dom
range.
I
think
that's
dealing
with
right
now,
but
what's
another
strange
thing
that's
happening
here?
Is
this
isn't
necessarily
a
range
like?
This
is
a
function?
We
don't
really
know
what
the
return
type
of
this
is.
A
And
I
don't
think
anywhere,
I
don't
think
I
don't
think
we
have
implemented
anywhere,
get
bounding,
client
wrecked
and
jstop.
So
that's,
I
don't
think
that's
part
of
range.
I
think
that's
part
of
a
like
just
any
element.
We
don't
have
that
support
in
jstop.
B
A
Yep
yep
the
plot
thickens
you're,
totally
right
and
that's
a
little
concerning
for
sure
and
all
of
it
really
sounds
like
we
want
to
have
a
nice
browser
environment,
but
there's
a
huge
tradeoff
with
that,
and
that's
that
tests
get
slow
and
because
they're
slow,
we
don't
actually
sandbox
each
test
and
those
are
all
the
issues
we
try
to
get
away
from
karma,
and
so
what
would
be
nice
when
we
need
to
do
these
integrations?
A
Okay,
yeah
having
a
full
browser
thing
would
be
nice,
but
then
we
also
have
to
really
make
sure
we
get
enough
bang
for
our
buck
with
each
integration
desk
like
we
don't
want
to
just
do
a
whole
bunch
of
them,
because
if,
if
they're
slow,
which
is
interesting,
do
we
skip
something
here?
A
A
Okay,
that's
good
to
know,
so
I
just
tried
to
check
that
out
here.
It
looks
like
it's
not
a
function
for
our
range,
which
is
unfortunate
and
if
we
go
to
create
an
element,
is
this:
how
you
create
an
element.
D
A
D
A
So
what
we
could
do-
and
let's
just
do
it
here
for
fun.
A
Let
me
go
back
to
where
we
were
doing
the
dom
shams
get
client
wrecks,
we're
gonna.
Do
this
kind
of
thing.
A
A
B
The
fun
thing
is
that
perhaps
we
will
end
up
mocking
code
meteor
and
squire
and
we
will
be
again
doing
a
unique
test.
A
I
don't
really
know
what
squire
does
and
so
that
that
really
might
be
the
best
thing
to
do,
because
it
seems
like
that
might
be
the
layer
between
the
dom
and
the
real
bit
we're
interested
in,
and
that's
that's
where
usually
it's
nice
to
mock
those
architectural
layers
stuff,
those
like
boundary
points
but
all
right.
These
are
both
functions
now,
so
I'm
gonna
say
that
I
think
we're
good.
A
A
We
have
a
matcher
called
to
be
visible
like
because
we
we,
we
inherited
a
lot
of
our
old
jquery
matchers
when
we
did
this
jessica
stuff.
A
Some
of
those
matches
don't
actually
do
anything,
so
I'd
suggest
not
to
you,
not
you
using
them
too
much.
One
of
them
that
didn't
really
do
anything
was
to
be
visible,
like
it
was
always
false,
and
so,
when
someone's
like
testing.
Oh,
is
this
visible
or
not
like
it's
like
we're,
not
actually
testing
anything
here,
and
that
was
concerning.
A
So
this
was
trying
to
make
it
work,
but
in
reality
we
probably
should
just
get
rid
of
the
matcher,
because
we're
trying
you
see
we're
like
we're
like
this
is
what
2b
visible
uses
under
the
hood
and
we're
seeing
like
hey
do
we
have
are
we
do
we
have
like
display
none
or
some
sort
of
hidden
style
up
my
chain,
so
we
can
actually
use
this
matcher
somehow,
but
in
retrospect
we
probably
should
just
disable
the
matcher
rather
than
implementing
our
own
thing.
So
we
can't
necessarily
just
copy
this.
A
Maybe
we
could,
but
I
don't
think
we
want
to
just
copy
this
thing.
I
think
we
want
to
just.
I
think
it's
I
think
we
just
want
it's
just
wrapping
the
parent
in
an
array
like.
I
think
it's
just
this
thing,
but
with
an
array,
so
I'm
gonna
do
I
don't
really
know
what
I'm
doing,
but
I'm
gonna
do
this
or
let
me
tell
let
me
see
what
you
guys
think
of
this
calling
return.
F
A
A
D
A
You
know
I
hear
what
you're
saying
chad
that
makes
a
lot
of
sense
yeah,
maybe
with
some
of
these
shims.
Maybe
we
should
like
consider
contributing
upstream
or
like
really
really
reevaluating
some
of
this,
especially
if
we
do
it,
and
so
we
have
so
one
interesting
thing.
Enrique
you
we
have
some
dependency
bump
like
you
set
up
like
hey,
we
need
to
check
before
we
do
these
dependency
bumps
or
something
oh
blocked
dependencies.
A
It
would
be
neat
to
be
like
hey
if
we're
bumping
this
dependency,
let's
double
check
the
change
log
and
see
if
we
can
remove
like
if
we
had
when
renovate
bot
creates
something
and
says
like.
Oh
here's,
the
new
package,
for
you
know
just
environment.js.16.
A
B
A
A
dri
for
for
yeah,
I
think
we
could.
I
I
kind
of
hope,
wonder
if,
like
for
some
very
specific
stuff,
I
could
see
it
being
really
helpful
if,
like
we
could
give
maintainers
instructions
for
like
before
we
do.
This
very
specific
thing
like
check
this
and
that
could
land
on
our
handbook,
but
it'd
also
be
really
cool
if
it
was
created
in
the
mr
and
like
so,
we
could
automate
part
of
renovatebot
for
this
specific
package
like
check
check
the
change
log
see
if
we
can
remove
these
dom
shim
stuff.
A
That
could
also
be
be
an
avenue
for
us
doing
something
like
hey
for
this
specific
gitlab
ui
bump.
You
know
check,
we
can
write
instructions
for
check
this
usage
and
here's
how
you
can
migrate
stuff,
I'm
just
thinking
pie
in
the
sky.
This
kind
of
thing
would
be
nice.
I
don't
really
know
what
it
what
it
looks
like.
Do
you
get?
What
do
you
guys
have
any
thoughts
of?
Have
you
guys,
chat
or
derek?
D
I
know
the
concept
of
it,
but
I
haven't
looked
at
how
ours
specifically
works,
but
the
one
thing
I
was
thinking
like
pie
in
the
sky,
for
example,
js
dom
it's
gotten
at
types
typescript
manifest
that
says
what
it
implements
like.
Theoretically,
some
aspect-oriented-ish
programming
thing
like
say:
look
at
that
and
somehow
detect.
If
we
are
implementing
something
that's
in
there
and
if
so,
we
shouldn't
be.
A
Good
idea,
yeah,
we
can
make
a
script
for
that.
I
think
that's
a
great
idea
and
then
that
could
be
our
instruction
for
our
maintainers.
Hey.
Are
we
bumping
this?
Let's
run
this
script
or
if
we
were
like
really
fancy
we
could
we
could
do
like
hey
dangerbot.
Are
we
bumping
this
run?
The
script
like
that
would
be.
D
We
may
lose
our
jobs
then,
but
as
as
far
as
like,
you
can't
really
rely
on
the
change
log
because,
like
we
just
saw
here
this
one
thing
wasn't
even
in
the
changelog
but
looking
at
the
types
and
somehow
saying
like,
is
this
thing
used
or
not?.
A
I
think
that's
a
really
really
good
point.
I
I
like
that
a
lot
can
you
share
just
that
that
types
that
you're
looking
at
right
now,
so
we
can
look
at
it
well,.
A
D
Right,
I
think
that,
like
in
ruby
and
other
languages
that
have
like
aspect
oriented
approach,
you
can
say
like
actually
instrument
this
method.
You
know
to
do
something
like
set
a
bit
if
it's
overwritten
or
extended
somewhere
or
never
called
or
called,
but
yes
seems
that's
harder
to
do
in
javascript,
because
you
don't
have
that.
You
know
metadata
about
methods.
B
If
we
create
a
function
like
we
are
here,
we
are
just
assigning
a
property
to
a
window
object
right
by
the
way
we
have
proxies.
We
could,
like
you,
know,
create
a
proxy
in
the
window,
object
and
just
check
if
that
a
property
or
exist,
but
a
simpler
way
of
doing
it
is
creating
a
function
that
says
that
it
could
be
called
override
window
property
and
it
checks
if
the
property
exists
already
before.
A
That's
a
good
idea
and
then
you
can
even-
and
I
would
say
it
should
even
just
blow
up
if,
if
we're
trying
to
do
it
so
that
we
remove
it
yeah,
that's
a
really
good
idea,
like
it
blows
up
by
default
and
if
you
have
to
override
it
for
some
reason
you
have
to
sort
of
opt
into
that
yeah.
That's
I
think,
that's
the
solution
is
these
shims
aren't
actually
shims
because
they're
not
doing
any
checking
they're
just
overwriting.
A
We
should
do
checking
and
then,
rather
than
I
would
say,
maybe
they're
making
a
graceful
show
make
it
a
shiv
so
that
it
just
blows
up
stubs,
not
much
yeah,
so
that
we
can
even
remove
this
file.
If
it's
there
like,
because
then
we
don't
need
any
of
this
code.
Yeah,
that's
a
good
point
yeah.
I
should
do
that
for
all
these
gems.
A
Cool
well,
hey!
I
think
we
solved
it
in
an
hour,
so
I'm
gonna,
I'm
gonna,
push
this
up.
I
think,
though
this
is
we'll
move
this
to
a
dom
shim,
like
that's
kind
of
been
our
our
style,
but
what
we'll
do
based
on
our
conversation
just
now?
Let's
do
it.
Do
you
guys
have
two
more
minutes.
A
Yes,
okay,
so
I'm
gonna
create
one
called
range
yeah
and
I'm
going
to
move
this
stuff
into
there
and
what
I'm
going
to
do
is
something
a
little
weird.
A
And
yeah
we
could
totally
find
a
way
to
get
rid
of
some
duplication
here,
but
and
if
what
do
you
guys
all
think
of
single
one?
This.
A
Nope
not
that
one
based.
A
Set
up
files
after
ends,
so
then
these
are
set
up
next,
so
that's
technically,
and
this
makes
sense.
This
is
where
we
would
do
our
shimming
cool,
so
we
already
do
that
yeah.
A
But
what
do
you
guys
think
of
these
errors?
Do
you
think
that
that's
maybe
now
that
put
in
multiple
lines?
That's
not
cool!
Nobody
likes
that
all
right.
B
I
think
they
are
helpful,
yeah,
just
that's
just
like
in
in
another
iteration.
We
can
create
that
utility
for
the
for
the
rest
of
the
machines.
A
B
A
Thank
you
really
yeah.
This
was
this
is
good.
I'm
glad
I'm
glad
we
got
to
problem
solve
this,
and
this
was
one
of
the.
This
is
one
of
the
times
when
pair
programming
is
successful,
it's
always
successful,
just
sometimes
it's
sweeter
than
others,
but
I'll.
Let
you
all
go
and
I'll
push
this
commit
up.
You
guys
have
a
great
rest
of
the
day.
You
too
cool.