denoland / denoland/std

@std/expect/fn implement 'jest compatible' mock function

Open
#6,290 4 comments 1 reaction 0 assignees View on GitHub
bug
Dominant language
TypeScript
Stars
3.6k
Forks
681
PR merge metrics
No merged PRs in 30d

Description

**Is your feature request related to a problem? Please describe.**

We do have 'Jest compatible' expect module, but it's `fn` implementation isn't really 'Jest compatible'. We don't have any api to support dynamic change of mock function implementation, and it seems like one of the main parts of being 'Jest compatible' in my opinion. And currently any migration of project from `node` to `deno` will require manual changes in this aspect.

**Describe the solution you'd like**

Provide same functionality [described for Jest's mock function](https://jestjs.io/docs/mock-function-api#reference) for `@stc/expect`'s `fn`, like:
- `mockImplementation()` and `mockImplementationOnce()`, with all of the sugarcoated `mockReturnValue()` etc
- `withImplementation()`.

Would be nice to return resource with `[Symbol.dispose]` from `withImplementation()` when scope callback wasn't provided.

Multiple implementation args of `fn` could be sugarcoated version of doing `fn().mockImplementationOnce().mockImplementationOnce()`.

To be backward compatible and implement `.mockRestore()` we either could use first argument function as `default implementation` or provide `.mockRestore()` only argument instead of multiple

Also would be nice to have `spyOn` implementation compatible with 'Jest' version.

**Describe alternatives you've considered**

Come with any other better api for dynamically changing implementation

**PS**

I'm willing to start working on this issue my self in my free time, if that's ok

**PS**

Referencing my other issue about [incompatibility with `@std/testing/mock`](https://github.com/denoland/std/issues/6289) as I think they are closely related

Just wanted to mention issue about [`@std/expect`'s `fn` not being type safe](https://github.com/denoland/std/issues/6247) here as it seems related in my opinion

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.