Problem
Consider the following function and passing test
function foo(bar, arg) { |
foo is a function that calls bar with a random first argument and arg which is just passed through.
The test passes as expected, but what if we wanted to check that the second argument is equal to arg.
expect(...).toHaveBeenCalledWith(...args) requires the test to provide the exact list of arguments passed to our jest.fn spy during the call.
### Solution
Use the asymetric matcher expect.anything() to ignore the first argument passed to foo.
test("Match any argument", () => { |
### Better Solution
Use expect.any(constructor) to check that the first argument is a number
test("Match any number", () => { |
### Other asymetric matchers
Jest also provides the following useful asymetric matchers:
expect.objectContaining(object) to check only certain properties of an object
expect.arrayContaining(array) to check only certain elements of an array
expect.stringContaining(string) to check part of a string
### Going further with jest-extended
If you need to be even more specific in your assertions, it might be worth checking out jest-extended
You will find useful additions to the base jest assertion API like:
myObject.toContainKeys([keys])
and many more ..
Happy testing :)