Adding Bun to your existing Jest project
Probably the most impressive performance gains you can get with Bun right now (some days after 1.0.0 release) is the speed of its test runner. You can make your Jest based test suite 10x faster or even more. This is some pretty mind boggling performance that we were not used to in JS community.
If you already have an existing mature project, you can start integrating Bun gradually. Change the suffix of the files you are going to test with Bun from eg. .test.
to .spec.
(or vice versa) and keep testing the others with Jest. You can start testing pure functions, utilities, etc, everything that does not depend on module mocking or some native platform api with Bun. The jest.mock
support might be coming as well, track the progress here.
For Bun create an npm script "test:bun": "bun test .test."
. For Jest - "test:jest": "jest --config {pathToConfigFile}"
, and add the following line to jest config testPathIgnorePatterns: ['.test.'],
to exclude .test.
files from execution. Simple. Now you can run both commands one after another.
Installing Bun on Node Alpine docker image for CI
If you use Gihub Actions, just get oven-sh/setup-bun, nothing else needed.
Bun also ships official docker image, however its pure Bun, not slim or alpine based, and not very optimised yet.
To install Bun on your existing Node container, check one of their dockerfiles (most of them WIP). On Alpine you will just need to pre-install unzip
and glibc
.
prepare environment
WORKDIR /tmp
RUN apk --no-cache add unzip
get bun
ADD https://github.com/oven-sh/bun/releases/latest/download/bun-linux-x64.zip bun-linux-x64.zip
RUN unzip bun-linux-x64.zip
get glibc
ARG GLIBC_RELEASE
RUN wget https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub && \
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_RELEASE}/glibc-${GLIBC_RELEASE}.apk
IMAGE
FROM alpine:latest
install bun
COPY --from=get /tmp/bun-linux-x64/bun /usr/local/bin
prepare glibc
ARG GLIBC_RELEASE
COPY --from=get /tmp/sgerrand.rsa.pub /etc/apk/keys
COPY --from=get /tmp/glibc-${GLIBC_RELEASE}.apk /tmp
install glibc
RUN apk --no-cache add /tmp/glibc-${GLIBC_RELEASE}.apk && \
cleanup
rm /etc/apk/keys/sgerrand.rsa.pub && \
rm /tmp/glibc-${GLIBC_RELEASE}.apk && \
smoke test
bun --version
Side notes
Drop nodemon
and ts-node
. Replace with bun --watch index.ts
/ bun --hot index.ts
/ bun index.ts
.
Repo with examples
... coming soon ...
Top comments (0)