TypeScript icon, indicating that this package has built-in type declarations

0.7.1 • Public • Published

npm version Deno



This package supports testing through utilities that can create spies and mocks for functions, objects, classes. It is still in experimental phase.


With frameworks like Deno and ES Modules it becomes much harder/impossible to mock modules like for example Jest does. Deno recommends to use specific ways to expose dependencies so that they can be replaced without mocking modules.

Alternatives like vitest do offer support for ES Modules, so if you like (to keep) this way of testing, that may be a viable option.

It is important to note that @rimbu/spy is aimed at testing without module mocking. This means that it is not possible to replace functions inside of other files/modules. The only way is to ensure the dependencies are in an object that is passed into the code that depends on it. This object can then be spied/mocked and passed into the code.

One motivation to use an external spying/mocking framework is to be independent of a specific testing framework, so that the pain of switching becomes much less if one decides to switch.

A popular external spying/mocking framework is Sinon JS, which offers probably most of the functionality available in this package. Like @rimbu/spy it is also aimed at spying/mocking without module mocking.

The @rimbu/spy package however offers a more simple and minimal API that is easy to learn and use. It also takes care that types are consistent with their original implementations.

It depends on preference and also use case coverage whether this package offers a full alternative. Please feel free to try it out and provide feedback, and don't forget to create issues if you find anything that is not working correctly.


Full documentation is still to be done. To read more about Rimbu, please visit the Rimbu Docs, or directly see the Rimbu Spy API Docs.

Or Try Out Rimbu in CodeSandBox.



Yarn / NPM / Bun

For yarn:

yarn add @rimbu/spy

For npm:

npm i @rimbu/spy

For bun:

bun add @rimbu/spy


For Deno, the following approach is recommended:

In the root folder of your project, create or edit a file called import_map.json with the following contents (where you should replace x.y.z with the desired version of Rimbu):

  "imports": {
    "@rimbu/": "https://deno.land/x/rimbu@x.y.z/"

Note: The trailing slashes are important!

In this way you can use relative imports from Rimbu in your code, like so:

import { Spy } from '@rimbu/spy/mod.ts';

To run your script (let's assume the entry point is in src/main.ts):

deno run --import-map import_map.json src/main.ts


import { Spy } from '@rimbu/spy';

const spyConsole = Spy.obj(console, {
  log: () => console.log('mocked'),
// => behaves as normal, logs "warning"
spyConsole.log("hello", "world);
// => logs "mocked"
spyConsole[Spy.META].nrCalls; // => 2
spyConsole.log.nrCalls;       // => 1
spyConsole.warn.calls[0];     // => ["warning"]
// => [["warn", "warning"], ["log", "hello", "world"]]


Arvid Nicolaas


Feel very welcome to contribute to further improve Rimbu. Please read our Contributing guide.


Made with contributors-img.


Licensed under the MIT License, Copyright © 2020-present Arvid Nicolaas.

See LICENSE for more information.

Package Sidebar


npm i @rimbu/spy



Weekly Downloads






Unpacked Size

101 kB

Total Files


Last publish


  • vitoke