6

这是我的 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 test

node-chat-app@1.0.0 test /home/priya/node-chat-app mocha server/**/*.test.js generateMessage 1) 应该生成正确的消息对象

0 通过 (12ms) 1 失败

1) generateMessage 应该生成正确的消息对象: TypeError: expect(...).toBeA is not a function at Context.it (server/utils/message.test.js:12:31)

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

帮我...

4

2 回答 2

23

从 v21+开始, expect 库的所有权已捐赠给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});
   });

});
于 2018-04-11T10:36:24.023 回答
0

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

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

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

main.js ↓</p>

function sum(a, b){

return a + b

}


module.exports =  sum;

main.test.js ↓</p>

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 不是函数

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

于 2021-03-21T11:49:10.983 回答