Использование React Stroybook в качестве Jest теста

У меня есть сборник рассказов React и как его использовать в качестве тестовых случаев

У меня есть "loader.js", который импортирует все истории

import sourceBasic from 'raw-loader!./Basics/foo.js?sourceMap';
import Basic from './Basics/foo';

const tree = {
  Basics:[
    {
      title:'Creating and applying a style',
      source:sourceBasic,   element:Basic
    },
    {        ....        }
  ],
  [       ....      ],
  ....
}

export default tree

Я использую raw-loader а также sourceMap показать источник с элементом в сборнике рассказов

Это прекрасно работает.

Моя проблема, когда я пытаюсь импортировать с Jest

FAIL  ./index.test.js
 ● Test suite failed to run

 Cannot find module 'raw-loader!./Basics/foo.js?sourceMap' from 'load.js'

   at Resolver.resolveModule (node_modules/jest-resolve/build/index.js:179:17)
   at Object.<anonymous> (example/stories/load.js:2:34)

Тестовый файл

import React from 'react';
import renderer from 'react-test-renderer';
import load from './example/stories/load'

for(const groupName in load ){
  const groupArray = load[groupName];
  describe(groupName, () => {
    for(const item of groupArray ){
      test(item.title, () => {
        const elem = renderer.create(item.element);
        expect(elem.toJSON()).toMatchSnapshot();
      }) // END test
    } // END for
  }) // END describe
} // END for

Спасибо за вашу помощь

ОБНОВИТЬ

Обновленный и работающий стройбук в качестве теста реализован на реактивной схеме проекта

Вы можете clone это ( ответная схема), npm install а потом npm test чтобы увидеть это в действии.

Вот выход на Трэвис:)

1 ответ

Решение

Если вы не заботитесь о raw-source и хочу издеваться над этим. Вы можете использовать moduleNameMapper в настройках jest в вашем package.json

Это позволит вам перехватить все require/import на основе регулярного выражения

Добавьте к вам package.json

  ...
  "dependencies": {
     ...
  },
  ...

  "jest": {
    "globals": {
      "__TEST__": true
    },
    "moduleNameMapper": {
      "\\.(css|jpg|png)$": "<rootDir>/empty-module.js",
      "^raw-loader": "<rootDir>/empty-module.js"
    },
    "testPathIgnorePatterns": [
      "/node_modules/"
    ],
    "verbose": true
  }
}

Надеюсь это поможет

Другие вопросы по тегам