Тестовый блок Javascript с модулем Jest ES6 - PullRequest
0 голосов
/ 01 января 2019

слишком много расходящихся постов при поиске в Google, чтобы выбрать четкое и современное решение ...

Я написал 3 теста, чтобы проверить различные возможности

===========.ТЕСТ 1 ОК ================

// helloJest.js

function sayHello() {
  return "hello there jest"
}
module.exports = sayHello;

// helloJestTest

const sayHello = require('../../src/client/js/helloJest');
test('string returning hello there jest', () => {// 
  expect(sayHello()).toEqual('hello there jest');
});

===========.ПРОВЕРКА ТЕСТА 2 ================

// helloJest.js

function sayHello() {
  return "hello there jest"
}
export default { sayHello }; // <= changed

// helloJestTest

const sayHello = require('../../src/client/js/helloJest');
test('string returning hello there jest', () => {// 
  expect(sayHello()).toEqual('hello there jest');
});

TypeError: sayHello is not a function

      3 |
      4 | test('string returning hello there jest', () => {//
    > 5 |   expect(sayHello()).toEqual('hello there jest');
        |          ^
      6 | });
      7 |

===========.ПРОВЕРКА 3 ТЕСТА ================

// helloJest.js

function sayHello() {
  return "hello there jest"
}
export default { sayHello }; //  <= changed

// helloJestTest

import { sayHello } from '../../src/client/js/helloJest'; // <= changed
test('string returning hello there jest', () => {// 
  expect(sayHello()).toEqual('hello there jest');
});

    TypeError: (0 , _helloJest.sayHello) is not a function

      3 |
      4 | test('string returning hello there jest', () => {//
    > 5 |   expect(sayHello()).toEqual('hello there jest');
        |          ^
      6 | });

Как правильно пройти TEST 3 ???

Я использую следующие пакеты

package.json

"babel-core": "^6.26.3",
"babel-jest": "^23.6.0",
"babel-loader": "^7.1.5",
"babel-preset-env": "^1.7.0",
"babel-preset-es2015": "^6.24.1",
...
"jest": {
    "moduleFileExtensions": ["js"],
    "transform": { "^.+\\.js?$": "babel-jest" },
    "testRegex": "/tests/.*\\.(js)$"
  }

и у меня в

.babelrc

{
  "presets": ["env"]
}

Ответы [ 2 ]

0 голосов
/ 01 января 2019

ТЕСТ 2

Вы по умолчанию экспортируете объект с единственным свойством, которое является функцией sayHello, поэтому вы должны импортировать его в шутку с помощью следующего:

const { sayHello } = require('../../src/client/js/helloJest');

ТЕСТ 3

Снова вы выполняете экспорт, как указано выше.В этом случае вы можете импортировать его следующим образом:

import Hello from '../../src/client/js/helloJest';

И тогда вы сможете использовать свою функцию как:

Hello.sayHello

0 голосов
/ 01 января 2019

Вы спотыкаетесь в нескольких местах там.Прежде всего: вы не используете {} со стандартным импортом / экспортом.

This:

export default { sayHello };

экспортирует объект в качестве экспорта по умолчанию для модуля,Объект имеет единственное свойство sayHello, относящееся к функции.Чтобы сделать функцию экспортом по умолчанию, не используйте {}:

export default sayHello;

Затем, когда импортирует , если вы хотите импортировать по умолчанию,не используйте {}:

import sayHello from '../../src/client/js/helloJest';

Если вы хотите экспортировать с именем export, вы используете {}:

export { sayHello };

и

import { sayHello } from '../../src/client/js/helloJest';

Примеры обоих на поршне: https://embed.plnkr.co/f8PhOhULphQUrVXwdXF3/

...