TypeError: expect(...).toBeA is not a function

TypeError: expect(...).toBeA is not a function

这是我的 message.test.js 文件。

  var expect = require('expect');

  var {generateMessage} = require('./message');

  describe('generateMessage', () => {
    it('should generate correct message object', () => {
      var from = 'Jen';
      var text = 'Some message';
      var message = generateMessage(from, text);

      expect(message.createdAt).toBeA('number');
      expect(message).toInclude({from, text});
  });
});

错误: priya@priya-pro:~/node-chat-app$ npm 测试

node-chat-app@1.0.0 test /home/priya/node-chat-app mocha server/**/*.test.js generateMessage 1) should generate correct message object

0 次通过(12 毫秒) 1 失败

1) 生成消息 应该生成正确的消息对象: TypeError: expect(...).toBeA 不是一个函数 在 Context.it (server/utils/message.test.js:12:31)

npm 错误!测试失败。有关详细信息,请参阅上文。

帮帮我...

来自 v21+ 的 expect library has been donated to jest 的所有权。从那时起,一些方法名称及其功能已更改。对代码进行以下修改将有助于解决问题。

var expect = require('expect');
var {generateMessage}  = require('./message');

describe('generateMessage', () => {
   it('should generate correct message object', () => {

       var from = 'Jen';
       var text = 'Some message';
       var message = generateMessage(from, text);

       expect(typeof message.createdAt).toBe('number');
       expect(message).toMatchObject({from, text});
   });

});

以类似的方式,我犯了一个基本的语法错误,我的终端显示:

TypeError: sum(...).toBe 不是函数。

这是我在 main.js 文件和 main.test.js 文件中使用的代码:

main.js

function sum(a, b){

return a + b

}


module.exports =  sum;

main.test.js

const sum = require('./main')
   


test('adds two numbers together', ()=>{

    expect(sum(2,2).toBe(4))
    
    
    })

我一直认为我的 module.exports/require 语法有问题。经过多次尝试,我一丝不苟地按照 Jest.js 教程 - 单元测试通过了!然后我将它与我的非功能副本进行比较 - 我在我的 main.test.js 文件中发现了错误:

main.test.js

    expect(sum(2,2).toBe(4))
    

需要的是:

    expect(sum(2,2)).toBe(4)

注意括号的位置——我没有将 .toBe() 匹配器链接到 expect() 函数,而是无意中将 .toBe() 与我的 sum(2,2) 一起传递到 expect() 函数值,导致:TypeError: sum(...).toBe is not a function !

事后看来这是一个非常明显的错误,但希望这对以后的人有所帮助! :-)