Тестовый конфиг для AVA + React-Native

Я пытаюсь протестировать свое нативное приложение с помощью AVA и babel-preset-react-native

Мой конфиг выглядит так:

"scripts": {
  "test": "ava"
},
"ava": {
  "files": [
    "src/**/__tests__/*.js"
  ],
  "failFast": true,
  "require": [
    "react-native-mock/mock.js",
    "babel-register"
  ],
  "babel": {
    "presets": [
      "react-native"
    ]
  }
},
"devDependencies": {
  "ava": "^0.13.0",
  "babel-preset-react-native": "^1.2.4",
  "babel-register": "~6.4.3",
  "react-native-mock": "0.0.6"
}

… и терпит неудачу следующим образом:

/Users/zoon/Projets/xxxxx/node_modules/babel-register/node_modules/babel-core/lib/transformation/file/index.js:556
      throw err;
      ^

SyntaxError: /Users/zoon/Projets/xxxxx/src/reducers/env.js: Unexpected token (12:8)
  10 |     case types.RECEIVE_CHANGE_ENV:
  11 |       return {
> 12 |         ...state,
     |         ^
  13 |         current: Environments[action.env]
  14 |       };
  15 |     default:

Если я экспортирую эту конфигурацию babel в файл .babelrc и использую «babel»: «inherit» в моей конфигурации AVA, произойдет сбой по-другому:

/Users/zoon/Projets/xxxxx/node_modules/lodash-es/lodash.js:10
export { default as add } from './add';
^^^^^^

SyntaxError: Unexpected token export

Я не могу понять, как правильно настроить это. Я пробовал Mocha, столкнулся с теми же проблемами.


person zoontek    schedule 14.03.2016    source источник
comment
@zooontek, откуда lodash-es? Это одна из ваших зависимостей? Если это так, я рекомендую вместо этого использовать прямое lodash. Код ES2015 должен быть скомпилирован перед развертыванием в npm, это позволяет избежать подобных проблем.   -  person James Talmage    schedule 15.03.2016
comment
@JamesTalmage Да, это одна из моих зависимостей. Вместо этого я мог бы полностью использовать lodash, но если я не могу настроить транспиляцию deps ES6 для тестирования, я теряю всю гибкость написанных ES6 libs и tree-shaking.   -  person zoontek    schedule 15.03.2016


Ответы (1)


babel-register игнорирует node_modules по умолчанию. Вы можете установить ignore:false в своем .babelrc, чтобы отключить это поведение. Вы могли бы (вероятно, должны) также указать более ограниченное регулярное выражение, чтобы избежать обработки всего в node_modules.

См. документы: https://babeljs.io/docs/usage/require/

Ваша полная конфигурация, вероятно, должна выглядеть примерно так:


.babelrc

{
  "presets": ["react-native"],
  "ignore": false
}

пакет.json

{
  "ava": {
    "babel": "inherit"
  }
}
person James Talmage    schedule 16.03.2016
comment
Я проигнорировал эти настройки, большое спасибо. Возможно, мне стоит поместить этот конфиг в документацию ava где-нибудь. - person zoontek; 17.03.2016
comment
@zoontek - Если это ответ, не могли бы вы его принять? - person James Talmage; 17.03.2016