---
title: "Comparing test assertion styles in JavaScript"
publication: "JavaScript Weekly"
issue: 657
published_at: "2023-10-05"
canonical_url: "https://javascriptweekly.com/issues/657"
---

Plus TypeScript 5.3 beta, how Photoshop got on to the Web, and was JavaScript really made in 10 days? |        

#​657 — October 5, 2023 

[Read on the Web](https://javascriptweekly.com/issues/657)  

Together with [![Frontend Masters logo\](https://res.cloudinary.com/cpress/image/upload/c_fill,g_auto,w_300,h_70/e_make_transparent/co_white,e_outline:5/nk0tfdvalivacz8rw7rt.png)](https://frontendmasters.com/courses/getting-a-job-v2/?utm_source=email&utm_medium=javascriptweekly&utm_content=gettingajobv2)  

JavaScript Weekly 

[![\](https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/sdlloxnrnqv2zu5aub3z.jpg)](https://jakelazaroff.com/words/an-interactive-intro-to-crdts/)  

[An Interactive Intro to CRDTs](https://jakelazaroff.com/words/an-interactive-intro-to-crdts/) — Conflict-free replicated data types (the so-called CRDTs) provide a popular approach to replicate data across numerous clients and allow live collaboration between them without conflicts. This post really digs into what makes CRDTs tick well, complete with interactive examples. 

Jake Lazaroff   

[Test Assertion Styles in JavaScript](https://blog.izs.me/2023/09/software-testing-assertion-styles/) — Isaac, fundamental to the development of npm and the growth of Node, shares his thoughts on the two main approaches common in JavaScript testing APIs and which he prefers best. 

Isaac Z. Schlueter   [![\](https://copm.s3.amazonaws.com/b59c08d3.png)](https://frontendmasters.com/courses/getting-a-job-v2/?utm_source=email&utm_medium=javascriptweekly&utm_content=gettingajobv2) 

[Free Course: Land a Software Engineering Role](https://frontendmasters.com/courses/getting-a-job-v2/?utm_source=email&utm_medium=javascriptweekly&utm_content=gettingajobv2) — Jerome Hardaway has helps over 300 folks get a software development job — now he shares his advice in this video course — featuring resume tips, networking advice, how to optimize your GitHub profile for technical scrutiny, and more. 

Frontend Masters sponsor    

- 🔵 [TypeScript 5.3 beta](https://devblogs.microsoft.com/typescript/announcing-typescript-5-3-beta/) has been released with improved support for [import attributes](https://devblogs.microsoft.com/typescript/announcing-typescript-5-3-beta/#import-attributes), improved type narrowing in numerous situations, and inlay hints in VS Code [can now jump you to the type's definition.](https://devblogs.microsoft.com/typescript/announcing-typescript-5-3-beta/#interactive-inlay-hints-for-types)
- 🔐 [npm provenance is now generally available](https://github.blog/changelog/2023-09-26-npm-provenance-general-availability/) on the main npm registry. Here's [a live example.](https://www.npmjs.com/package/sigstore#provenance)
- 🎨 Adobe officially launched its version of Photoshop for the Web last week and Addy Osmani wrote [a great post showing off all the web technologies](https://medium.com/@addyosmani/photoshop-is-now-on-the-web-38d70954365a) it took to make it happen. The modern browser is a powerhouse!
- 🏠 In June we featured [val.town](https://www.val.town/), an interesting site where you can write and deploy TypeScript in a social and serverless fashion. Big changes are coming [in the shape of Val Town v3.](https://blog.val.town/blog/introducing-val-town-v3) A platform to watch.
- 🤔 [Was JavaScript really made in 10 days?](https://buttondown.email/hillelwayne/archive/did-brendan-eich-really-make-javascript-in-10-days/) _It's complicated._
- ⚠️ The forthcoming ESLint 9.0 is a significant enough release that you might want to [prepare your custom rules for it in advance.](https://eslint.org/blog/2023/09/preparing-custom-rules-eslint-v9/)   

**🎉 RELEASES:** 

- [Node v20.8.0 (Current)](https://nodejs.org/en/blog/release/v20.8.0) – Key performance improvements for streams.
- [Sinon 16.1](https://sinonjs.org/) – Provides test spies, stubs and mocks.
- [Astro 3.2](https://astro.build/blog/astro-320/), [Redux Toolkit 1.9.7](https://github.com/reduxjs/redux-toolkit/releases/tag/v1.9.7), and [pnpm 8.8](https://github.com/pnpm/pnpm/releases/tag/v8.8.0)  

📒 Articles & Tutorials 

[![\](https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/d37genwit7lfvmphtep2.jpg)](https://www.svix.com/blog/strong-typing-hill-to-die-on/)  

['Strong Static Typing, A Hill I'm Willing to Die On...'](https://www.svix.com/blog/strong-typing-hill-to-die-on/) — Starting off with TypeScript and moving on to Rust, the author shares why he feels so strongly that when it comes to having static types in a language, there really is no argument. (This then led to [extensive discussion](https://news.ycombinator.com/item?id=37764326) on Hacker News.) 

Tom Hacohen   

📗 [The Story of Third-Party JavaScript (The Book)](https://benv.ca/blog/posts/the-story-of-third-party-javascript) — Manning published a book by Ben Vinegar and Anton Kovalyov ten years ago that was entirely focused on writing JavaScript to run on _other_ people’s sites – quite apt as the authors worked at Disqus at the time! This post isn’t about the topic itself but goes deep into how the book came together and how well it did. 

Ben Vinegar   

📅 [JetBrains JavaScript Day 2023: A Virtual Event You Won’t Want to Miss](https://jb.gg/JSDay2023_JSW) — Get up to speed with modern JavaScript and TypeScript development in just one day. 

JetBrains sponsor   

[Working with a TypeScript Monorepo with npm Workspaces](https://www.yieldcode.blog/post/npm-workspaces/) — npm’s [workspaces feature](https://docs.npmjs.com/cli/v7/using-npm/workspaces) makes it easier to manage multiple packages within a single top-level package/monorepo. 

Dmitry Kudryavtsev   

[Test Your React Libraries Locally with Yalc](https://www.propelauth.com/post/test-your-react-libraries-with-yalc) — [Yalc](https://github.com/wclr/yalc) simplifies the process of working with and ‘publishing’ packages _entirely locally_ so you can try things out without publishing to a remote, and potentially public, registry. 

Andrew Israel (PropelAuth Blog)   

▶[Let's Create a Filter Table Component in Vue](https://www.youtube.com/watch?v=au27CwIFHzs) 
Andrew Schmelyun   

[Integrating Slonik with Express.js](https://contra.com/p/bgA66gkW-integrating-slonik-with-express-js) — A type-safe Postgres client library. 
Gajus Kuizinas   

[Next.js 13 vs Remix: A Case Study](https://prateeksurana.me/blog/nextjs-13-vs-remix-an-in-depth-case-study/) 
Prateek Surana   

[Using the `Intl` Segmenter API](https://polypane.app/blog/using-the-intl-segmenter-api/) 
Kilian Valkhof  

🛠 Code & Tools 

[![\](https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/gx9uxi2lk1lsiyzyywsb.jpg)](https://tailwind-elements.com/)  

[Tailwind Elements 1.0: 500+ Bootstrap Components Recreated with Tailwind](https://tailwind-elements.com/) — Claims to offer more functionality compared to Bootstrap and follows a 'minimal' Material-esque design language for user familiarity. Easily integrates with Angular, Vue, etc. 

Tailwind Elements   

[Lite YouTube Embed 0.3: A Faster Youtube Embed](https://github.com/paulirish/lite-youtube-embed/releases/tag/v0.3.0) — Faster than the official one, at least. v0.3 implements reliable autoplay. There’s a [live demo here](https://paulirish.github.io/lite-youtube-embed/). 

Paul Irish   

[Day.js: A 2KB Immutable Date Library](https://github.com/iamkun/dayjs) — Pitched as a Moment.js alternative with a mostly compatible API, Day is a smaller library for parsing, validating, manipulating, and displaying dates and times. 

iamkun   

[Stop Feeling Lost and Inefficient When Debugging via `console.log`](https://console-ninja.com/?utm_source=cooperpress&utm_medium=javascriptweekly&utm_content=javascriptweekly) — See `console.log` output and runtime errors alongside your code. No config, no setup, no hassle. Supports Vite, Bun, Webpack, Next.js, Remix, and more. 

Wallaby Team sponsor   

[Viselect: Let Users Visually Select DOM Elements](https://simonwep.github.io/selection/) — If you’ve got a variety of elements and you want users to be able to select them in groups, individually, or even in _multiple_ groups, this lets you offer that functionality easily. Can be used in a vanilla fashion or with integrations for React or Vue.js. 

Simon Reinisch   

[Tailwind Next.js Starter Blog 2.0: A Starter Template for a Next.js Blog](https://github.com/timlrx/tailwind-nextjs-starter-blog) — An up-to-date template using the modern Next.js app directory structure along with server components. [A full explanation of the updates](https://tailwind-nextjs-starter-blog.vercel.app/blog/release-of-tailwind-nextjs-starter-blog-v2.0). 

Timothy Lin   

[Kaluma: A Tiny JS Runtime for the Raspberry Pi Pico](https://kalumajs.org/) — Can you get a JavaScript runtime into the 64KB necessary to run on the Raspberry Pi Pico (which uses the RP2040 microcontroller)? Kaluma can. 

Kaluma Project   

[sort-on 6.0: Sort Arrays on an Object Property](https://github.com/sindresorhus/sort-on) — Short & sweet. [Samples](https://github.com/sindresorhus/sort-on#usage). 

Sindre Sorhus   

[Craft.js 0.2: A React Framework for Building Drag and Drop Page Editors](https://craft.js.org/) — It’s a bold move to make the landing page for your project be a text editor itself, but we like it. [GitHub repo](https://github.com/prevwong/craft.js). 

Prev Wong   

[Create Collaborative Apps Like Figma and Miro in Days with Ably](https://www.ably.com/spaces) 

Ably sponsor   

- 📅 [React Native Big Calendar 4.3](https://github.com/acro5piano/react-native-big-calendar) – A Google Calendar/Outlook-style large calendar control.
- 📊 [Lightweight Charts 4.1](https://www.tradingview.com/lightweight-charts/) – High performance financial charting for canvases. [Release notes](https://github.com/tradingview/lightweight-charts/releases/tag/v4.1.0).
- [CKEditor5 40.0](https://github.com/ckeditor/ckeditor5/releases/tag/v40.0.0) – Commercial rich text editor framework. Now with an [AI assistant feature](https://ckeditor.com/docs/ckeditor5/latest/features/ai-assistant.html#demo).
- [article-extractor 8.0](https://github.com/extractus/article-extractor) – Extract article content for a URL in Node.
- [Shaka Player 4.5](https://github.com/shaka-project/shaka-player) – Library to play adaptive media formats (DASH, HLS and MSS).
- [Ziggy 1.7](https://github.com/tighten/ziggy) – Use Laravel named routes in JavaScript.
- [Marked 9.1](https://github.com/markedjs/marked) – Markdown parser & compiler.    

💻 Jobs  

[Apply Now and Work #LikeABosch](https://www.bosch.com/careers/job-offers/?utm_campaignid=javascript&utm_source=cooperpress&utm_medium=cpc&utm_campaign=wlab&utm_term=job&utm_content=evp) — Our promise to our associates is rock-solid: we grow together, enjoy our work & inspire each other. Join in & feel the difference. 
Bosch   

[Frontend Developer 🚀 (Remote, Work from Anywhere 🏖️)](https://crystallize.com/careers/frontend-developer) — Enjoy TypeScript, React, GraphQL and performance? Join in building our super-fast headless commerce service with a beautiful UI. 
Crystallize    

🎁 A VS Code Bonus 

[![\](https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/hotdohbaddrcdip915m7.jpg)](https://viatsko.github.io/awesome-vscode/)  

[Awesome VS Code: A Curated List of Themes and Extensions](https://viatsko.github.io/awesome-vscode/) — Yep, it’s one of _those_ ‘awesome’ lists, but it's packed not only with links to themes and useful extensions, but it has screenshots for most of them too. Skim through, something will jump out at you. 

Valerii Iatsko         

Published by [Cooperpress](https://cooperpress.com/) and edited by [Peter Cooper](https://twitter.com/cooperx86) 

'JavaScript' is a trademark of Oracle Corporation in the US
We are not endorsed by or affiliated with Oracle. 

[Change your email address](https://javascriptweekly.com/edit_subscription/*|UID|*) or [stop getting this newsletter](https://javascriptweekly.com/leave/*|UID|*). 

© Cooper Press Ltd · Fairfield Enterprise Centre, Louth, LN11 0LS, United Kingdom
