Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Incorrect prototype check #182

Open
Eomm opened this issue Apr 12, 2023 · 2 comments
Open

Incorrect prototype check #182

Eomm opened this issue Apr 12, 2023 · 2 comments
Labels
support Questions, discussions, and general support

Comments

@Eomm
Copy link

Eomm commented Apr 12, 2023

Support plan

  • is this issue currently blocking your project? yes
  • is this issue affecting a production system? no

Context

  • node version: 18.x
  • module version with issue: 9.0.3
  • last module version without issue: NA
  • environment (e.g. node, browser, native): node
  • used with @hapi/[email protected]
  • any other relevant information: NA

What are you trying to achieve or the steps to reproduce?

The module does not ignore the prototype during a comparison.

const Code = require('@hapi/code');

const noProto = Object.create(null);
noProto.a = Object.create(null);
noProto.a.b = 1;

Code.settings.comparePrototypes = false;
Code.expect([noProto]).to.once.include({ a: { b: 1 } });

** By using simple objects {} the comparison works as expected.

What was the result you got?

/Users/manuel_spigolon/dev/misc/hapi/code/lib/index.js:139
    throw error;
    ^

Error: Expected [ [Object: null prototype] { a: [Object: null prototype] { b: 1 } } ] to include { a: { b: 1 } } once
    at internals.Assertion.internals.include (/Users/manuel_spigolon/dev/misc/hapi/code/lib/index.js:239:17)
    at Object.<anonymous> (/Users/manuel_spigolon/dev/misc/hapi/code/asd.js:8:32)
    at Module._compile (node:internal/modules/cjs/loader:1155:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1209:10)
    at Module.load (node:internal/modules/cjs/loader:1033:32)
    at Function.Module._load (node:internal/modules/cjs/loader:868:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
    at node:internal/main/run_main_module:22:47 {
  actual: undefined,
  expected: undefined,
}

What result did you expect?

No error due to the default comparePrototypes = false setting

@Eomm Eomm added the support Questions, discussions, and general support label Apr 12, 2023
@kanongil
Copy link
Contributor

comparePrototypes is only supposed to work for equal() / equals().

You should be able to workaround this by checking each array element yourself using equal().

@Eomm
Copy link
Author

Eomm commented Apr 14, 2023

Would you mind accepting a PR to support it with arrays too?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
support Questions, discussions, and general support
Projects
None yet
Development

No branches or pull requests

2 participants