Skip to content

Can only call expect.extend(..) once as it overwrites the proxy's custom extend #72

@sb3700

Description

@sb3700

Bug

  • package version: v1.1.3
  • node version: 14.21.3
  • npm (or yarn) version: 6.14.18
  • jest version: 26.6.2

Relevant code or config

expect.extend({
  toBe1(received) {
    const pass = received === 1;
    return pass
      ? { pass, message: () => `expected ${received} to be 1` }
      : { pass, message: () => `expected ${received} not to be 1` };
  }
});

expect.extend({
  toBe2(received) {
    const pass = received === 2;
    return pass
      ? { pass, message: () => `expected ${received} to be 2` }
      : { pass, message: () => `expected ${received} not to be 2` };
  }
});

console.log(expect['toBe1'], expect['toBe2']);
// [Function (anonymous)] undefined

What happened (please provide anything you think will help):
Thanks for the library!

The problem is at https://github.com/mattphillips/jest-expect-message/blob/main/src/withMessage.js#L92.

expectProxy = Object.assign(expectProxy, expect); overwrites expectProxy.extend with expect.extend.

It could be fixed by changing the line to:

for (const key of expect) {
  if (key !== 'extend') {    // or !(key in eventProxy)
    expectProxy[key] = expect[key];
  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions