TypeError: Невозможно прочитать «прототип» свойства undefined + Jest + NodeJS

Я использую jest для модульного тестирования API-интерфейсов nodeJS. Я установил jest и добавил его в скрипт в package.json. Но столкнувшись с проблемой:

FAIL 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! [email protected] test: `jest`
 npm ERR! Exit status 1
 npm ERR!
 npm ERR! Failed at the [email protected] 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)
 })

Любые предложения приветствуются. Спасибо!


person A.P    schedule 04.12.2018    source источник


Ответы (3)


Измените свой экспорт в math.js на:

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

Я полагаю, что NodeJS не поддерживает синтаксис импорта/экспорта ES6.

person Elliot Lewis    schedule 04.12.2018
comment
Зависит от версии NodeJS, нет? :) - person Elliot Lewis; 04.12.2018
comment
stackoverflow.com/ вопросов/48139882/ Похоже, у других есть аналогичная проблема. Может быть, это связано с библиотекой request-promise-core? - person Elliot Lewis; 04.12.2018
comment
Как я могу отладить то, какая зависимость создает проблему. Во время отладки я не вижу ошибок, связанных с зависимостями. - person A.P; 04.12.2018
comment
@AP Худший способ, попробуйте удалить по одному и проверить. - person Praveen Kumar Purushothaman; 04.12.2018
comment
Это образец файла в одном большом проекте. У него так много зависимостей, что удалить по одной и проверить будет сложно :( - person A.P; 04.12.2018
comment
Любое предложение ? - person A.P; 07.12.2018

Экспорт использует импорт. 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 };

Это просто правильное сочетание.

person Praveen Kumar Purushothaman    schedule 04.12.2018

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

введите здесь описание изображения

person Gagan Ganapathy    schedule 11.02.2019