开玩笑TypeError:Document.save不是函数

艾伦·胡安

我正在尝试为具有用户模型的Express应用程序编写一些测试。我的方法之一如下所示:

let user = await User.findById(req.params.userId);
user.name = req.body.name || user.name; 
user.password = req.body.password || user.
user = await user.save();

该代码按预期运行,但是当我对其进行测试时,Jest抱怨道:

TypeError: user.save is not a function

现在,我正在像这样模拟整个用户模型:

jest.mock('../../models/User');

我试图像这样模拟保存功能,但没有改变:

jest.spyOn(User.prototype, 'save')
      .mockImplementationOnce(() => Promise.reject('fail update'))

如我之前所说,代码运行良好。我在运行服务器时没有收到此错误。

但是,发生了一件奇怪的事情:当我运行测试时,我从猫鼬那里得到了这个警告。

猫鼬:看起来您正在尝试使用Jest的默认jsdom测试环境来测试Mongoose应用程序。请确保您已阅读有关配置Jest以测试Node.js应用程序的Mongoose的文档:http : //mongoosejs.com/docs/jest.html

我阅读了文档,它说的是在Jest配置文件上将testEnvironment设置为“ node”,这已经在做了。这是我的jest.config.js文件:

module.exports = {
    testEnvironment: 'node'
};

但是我一直收到警告。

这是我的测试脚本: jest --watchAll

任何帮助将不胜感激。提前致谢

安德列斯·穆尼兹(AndresMuñoz)

您收到该错误的原因是以下行:

let user = User.findById(req.params.userId)

findById()是异步方法,因此您必须将await关键字放在代码中,如下所示:

let user = await User.findById(req.params.userId)

由于您的代码并未真正等待findById()user变量的响应undefined因此它user.save()实际上不是函数。您可以尝试打印console.log(user),它将完成undefined

为避免出现此消息“ Mongoose: looks like you're trying to test a Mongoose app with Jest's...”,您必须在中配置Jest package.json,如下所示:

"jest": {
  "testEnvironment": "node"
},

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

TypeError:XXXXXXX不是函数(在开玩笑的同时)

来自分类Dev

开玩笑抛出TypeError:this.inputEl.focus不是函数#1964

来自分类Dev

开玩笑/反应/ Mobx:TypeError mobxReact.observer不是函数

来自分类Dev

开玩笑的自动模拟失败:TypeError:fs.readdirSync不是一个函数

来自分类Dev

开玩笑TypeError:configService.get不是一个函数

来自分类Dev

在函数内部开玩笑

来自分类Dev

开玩笑-模拟update()函数

来自分类Dev

开玩笑:模拟构造函数

来自分类Dev

开玩笑SpyOn值而不是getter

来自分类Dev

从Promise开玩笑的模拟回调函数

来自分类Dev

开玩笑如何测试调用函数的行?

来自分类Dev

开玩笑地模拟一个toPromise函数.toPromise不是一个函数

来自分类Dev

开玩笑-断言异步函数引发测试失败

来自分类Dev

开玩笑-ReferenceError:导入的函数未定义

来自分类Dev

为什么开玩笑不调用useEffect挂钩内的函数?

来自分类Dev

开玩笑-函数fs.writefile中的模拟回调

来自分类Dev

开玩笑-dontMock函数无法按预期工作

来自分类Dev

开玩笑:模拟构造函数以返回错误

来自分类Dev

开玩笑未能使用泛型编译函数

来自分类Dev

无法模拟createQueryBuilder函数typeorm nestjs开玩笑

来自分类Dev

TypeError:image.save不是函数,但是使用mongoose和express创建新文档时

来自分类Dev

开玩笑-react-automata-未定义不是对象(评估“ machine.states”)

来自分类Dev

开玩笑:TypeError:无法读取未定义的属性'foo'

来自分类Dev

开玩笑的测试-TypeError:无法读取null的属性“ filter”

来自分类Dev

开玩笑instace()。simulate('dayClick'); TypeError不存在

来自分类Dev

Vue +开玩笑+打字稿:意外令牌=类静态函数

来自分类Dev

开玩笑的匹配器错误:接收到的值必须是一个函数

来自分类Dev

开玩笑引发有关缺少全局函数(vue.prototype)的错误

来自分类Dev

开玩笑的嘲笑没有看到它已在函数中的if语句中调用

Related 相关文章

  1. 1

    TypeError:XXXXXXX不是函数(在开玩笑的同时)

  2. 2

    开玩笑抛出TypeError:this.inputEl.focus不是函数#1964

  3. 3

    开玩笑/反应/ Mobx:TypeError mobxReact.observer不是函数

  4. 4

    开玩笑的自动模拟失败:TypeError:fs.readdirSync不是一个函数

  5. 5

    开玩笑TypeError:configService.get不是一个函数

  6. 6

    在函数内部开玩笑

  7. 7

    开玩笑-模拟update()函数

  8. 8

    开玩笑:模拟构造函数

  9. 9

    开玩笑SpyOn值而不是getter

  10. 10

    从Promise开玩笑的模拟回调函数

  11. 11

    开玩笑如何测试调用函数的行?

  12. 12

    开玩笑地模拟一个toPromise函数.toPromise不是一个函数

  13. 13

    开玩笑-断言异步函数引发测试失败

  14. 14

    开玩笑-ReferenceError:导入的函数未定义

  15. 15

    为什么开玩笑不调用useEffect挂钩内的函数?

  16. 16

    开玩笑-函数fs.writefile中的模拟回调

  17. 17

    开玩笑-dontMock函数无法按预期工作

  18. 18

    开玩笑:模拟构造函数以返回错误

  19. 19

    开玩笑未能使用泛型编译函数

  20. 20

    无法模拟createQueryBuilder函数typeorm nestjs开玩笑

  21. 21

    TypeError:image.save不是函数,但是使用mongoose和express创建新文档时

  22. 22

    开玩笑-react-automata-未定义不是对象(评估“ machine.states”)

  23. 23

    开玩笑:TypeError:无法读取未定义的属性'foo'

  24. 24

    开玩笑的测试-TypeError:无法读取null的属性“ filter”

  25. 25

    开玩笑instace()。simulate('dayClick'); TypeError不存在

  26. 26

    Vue +开玩笑+打字稿:意外令牌=类静态函数

  27. 27

    开玩笑的匹配器错误:接收到的值必须是一个函数

  28. 28

    开玩笑引发有关缺少全局函数(vue.prototype)的错误

  29. 29

    开玩笑的嘲笑没有看到它已在函数中的if语句中调用

热门标签

归档