在Jest测试中的.toBeInstanceOf(String)在buffer.toString()上?

bgu*_*uiz 5 javascript testing node.js jestjs

如何expect(str).toBeInstanceOf(String)在Jest断言中使用已创建的字符串Buffer#toString()

或者这是正确的事情expect(typeof str).toEqual('string')吗?


细节:

该测试用例typeof通过:

it('should test a Buffer.toString() - typeof', () => {
  const buf = new Buffer('hello world');
  const str = buf.toString('hex');
  expect(buf).toBeInstanceOf(Buffer);
  expect(typeof str).toEqual('string');
  // expect(str).toBeInstanceOf(String);
});
Run Code Online (Sandbox Code Playgroud)

但是,此测试用例.toBeInstanceOf()失败:

it('should test a Buffer.toString()', () => {
  const buf = new Buffer('hello world');
  const str = buf.toString('hex');
  expect(buf).toBeInstanceOf(Buffer);
  // expect(typeof str).toEqual('string');
  expect(str).toBeInstanceOf(String);
});
Run Code Online (Sandbox Code Playgroud)

这是它的Jest输出:

 FAIL  ./buffer.jest.js
  ? should test a Buffer.toString()

    expect(value).toBeInstanceOf(constructor)

    Expected value to be an instance of:
      "String"
    Received:
      "68656c6c6f20776f726c64"
    Constructor:
      "String"

      at Object.<anonymous>.it (password.jest.js:11:15)
      at Promise.resolve.then.el (node_modules/p-map/index.js:42:16)
      at process._tickCallback (internal/process/next_tick.js:109:7)
Run Code Online (Sandbox Code Playgroud)

Ung*_*ilz 6

如果你有一个看看toBeInstanceOf实现,你会看到,instanceof用于检查,但你可以看到它在展示了Mozilla的文档string primitive是不一样的事情String源自Object

您的第一个变体是检查的正确方法:

expect(typeof str).toEqual('string');
Run Code Online (Sandbox Code Playgroud)