referee icon indicating copy to clipboard operation
referee copied to clipboard

Does not handle objects without prototype

Open fatso83 opened this issue 4 years ago • 2 comments

  • library version : 3.2.0
  • Environment : Node

What did you expect to happen? That it would print a normal assertion error

What actually happens It fails with

TypeError: Cannot convert object to primitive value
    at String (<anonymous>)
    at /tmp/test1/node_modules/@sinonjs/referee/lib/interpolate-pos-arg.js:12:44
    at Array.reduce (<anonymous>)
    at interpolatePosArg (/tmp/test1/node_modules/@sinonjs/referee/lib/interpolate-pos-arg.js:9:12)
    at Object.fail (/tmp/test1/node_modules/@sinonjs/referee/lib/define-assertion.js:30:27)
    at assertion (/tmp/test1/node_modules/@sinonjs/referee/lib/define-assertion.js:68:17)
    at Function.referee.<computed>.<computed> [as isUndefined] (/tmp/test1/node_modules/@sinonjs/referee/lib/define-assertion.js:93:26)
    at Object.<anonymous> (/tmp/test1/mytest.js:4:8)

How to reproduce

$ cat > mytest.js  << EOF
var referee = require("@sinonjs/referee");
var assert = referee.assert;

assert.isUndefined(Object.create(null));
EOF

node mytest.js 

fatso83 avatar Nov 20 '19 13:11 fatso83

A way to fix this is for interpolate to check if the object has a toString method and default to using JSON.stringify(value).

fatso83 avatar Nov 20 '19 13:11 fatso83

Alternatively, we could prepare values with Object.prototype.toString.call(value).

mantoni avatar Nov 28 '19 14:11 mantoni