【问题标题】:TypeError: Cannot read property 'prototype' of undefined + Jest + NodeJSTypeError:无法读取未定义 + Jest + NodeJS 的属性“原型”
【发布时间】:2019-05-05 19:50:32
【问题描述】:

我正在使用 jest 对 nodeJS API 进行单元测试。我已经安装了 jest 并将其添加到 package.json 中的脚本中。但面对问题:

失败 api/test/math.test.js ● 测试套件无法运行

TypeError: Cannot read property 'prototype' of undefined

 at module.exports (node_modules/request-promise-core/configure/request2.js:34:48)
 at Object.<anonymous> (node_modules/request-promise-native/lib/rp.js:15:1)
 at Object.<anonymous> (node_modules/jsdom/lib/api.js:6:17)

 Test Suites: 1 failed, 1 total
 Tests:       0 total
 Snapshots:   0 total
 Time:        0.091s
 Ran all test suites.
 npm ERR! code ELIFECYCLE
 npm ERR! errno 1
 npm ERR! chain-analytics@1.0.0 test: `jest`
 npm ERR! Exit status 1
 npm ERR!
 npm ERR! Failed at the sample-project@1.0.0 test script.
 npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

以下是我的示例类:

math.js:

  const sum = (a, b) => a + b
  const mul = (a, b) => a * b
  const sub = (a, b) => a - b
  const div = (a, b) => a / b

  export default { sum, mul, sub, div };

math.test.js:

 const  {sum, mul, sub, div}  = require("./math")

 test("Adding 1 + 1 equals 2", () => {
   expect(sum(1, 1)).toBe(2)
 })
 test("Multiplying 1 * 1 equals 1", () => {
   expect(mul(1, 1)).toBe(1)
 })
 test("Subtracting 1 - 1 equals 0", () => {
   expect(sub(1, 1)).toBe(0)
 })
 test("Dividing 1 / 1 equals 1", () => {
   expect(div(1, 1)).toBe(1)
 })

感谢任何建议。谢谢!

【问题讨论】:

    标签: javascript node.js jestjs babel-jest


    【解决方案1】:

    导出使用导入。 module.exports 会给你require

    模块和要求

    您应该更改math.js

    module.exports = { sum, mul, sub, div };
    

    代码:

    const {sum, mul, sub, div} = require("./math");
    

    导入/导出

    或者你应该使用:

    import { sum, mul, sub, div } from "./math";
    

    代码:

    export default { sum, mul, sub, div };
    

    这是正确的组合。

    【讨论】:

      【解决方案2】:

      math.js 中的导出更改为:

      module.exports = { sum, mul, sub, div };
      

      NodeJS 不支持我认为的 ES6 导入/导出语法。

      【讨论】:

      • 取决于 NodeJS 版本,不是吗? :)
      • stackoverflow.com/questions/48139882/… 看起来其他人也有类似的问题。可能与request-promise-core 库有关?
      • 如何调试导致问题的依赖项。在调试时,我没有看到任何与依赖相关的错误。
      • @A.P 最糟糕的方法,尝试一个一个删除并检查。
      • 这是一个大项目中的示例文件。它的依赖关系太多了,很难一一删除和检查:(
      【解决方案3】:

      q.js

      function sum(a, b) {
        return a + b;
      }
      
      module.exports = sum;

      q.test.js

      const sum = require('../src/q');
      
      test('adds 1 + 2 to equal 3', () => {
        const result = sum(1, 3);
        expect(result).toBe(3);
      });

      即使这会产生错误,这也是从jest 文档中复制的! https://jestjs.io/docs/en/getting-started

      【讨论】:

        猜你喜欢
        • 2021-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-06
        • 2021-11-07
        • 1970-01-01
        • 2020-12-23
        相关资源
        最近更新 更多