由于绝对路径,摩卡不断轰炸
Mocha keeps bombing due to absolute paths
我在使用 Enzyme 和 Mocha 测试我的 React 项目时遇到了很多麻烦。我有这样的测试:
import React from 'react';
import { expect } from 'chai';
import { shallow } from 'enzyme';
import { ChipInput} from '../client/components/Chips';
describe('<ChipInput />', _ => {
it('rocks', done => {
done();
});
});
并且当 ChipInput
被导入时,该文件会导入带有绝对路径的内容,例如/lib/collections/tags
,然后 Mocha 出错了,因为它显然只执行相对路径。我如何让它工作?
编辑:
实际错误:
Error: Cannot find module '/lib/collections/tags'
发生这种情况是因为 /tests/ChipInput-test.js
从 /client/components/Chips/index.js
导入了 ChipInput
组件,其中包含以下几行:
import React from 'react';
import {
MapsLocalOffer as TagIcon,
ImageRemoveRedEye as InsightIcon,
EditorInsertChart as TestIcon,
SocialPerson as UserIcon,
} from 'material-ui/svg-icons';
import { Tag } from '/lib/collections/tags'; // error thrown here
import { Insight } from '/lib/collections/insights';
// import { Test } from '/lib/collections/tests';
import Chip from './Chip';
import ChipDisplay from './ChipDisplay';
import ChipInput from './ChipInput';
import * as chipTypes from './chip-types';
这是解决方案,既好又简单!
https://github.com/mantrajs/babel-root-slash-import
基本上,安装所述包:
npm install babel-root-slash-import --save-dev
将插件添加到 .babelrc
:
{
"plugins": [
"babel-root-slash-import"
]
}
一切顺利。
对于从 google 访问这里的任何人,虽然 ffxsam 的答案会起作用,但有很多方法可以实现这一点。 Node 的 require 允许通过环境变量或以编程方式设置基数,允许不需要前导斜杠的简单绝对路径(require("my/module");
vs require("/my/module");
)。
我使用 gulp 作为 taskrunner,所以我的首选技术是使用 app-module-path
在我的 gulp 文件的顶部执行以下操作(这在任何地方都有效,所以只要你还没有遇到任何绝对 require
s):
require('babel-core/register'); //for mocha to use es6
require('app-module-path').addPath(__dirname + '/src'); //set root path
//I also use webpack to pull in other extensions, so I
//want mocha to noop out on them
require.extensions['.css'] = _.noop;
require.extensions['.scss'] = _.noop;
require.extensions['.png'] = _.noop;
require.extensions['.jpg'] = _.noop;
require.extensions['.jpeg'] = _.noop;
require.extensions['.gif'] = _.noop;
要获得更完整的摘要,请查看 github 用户 branneman 的要点:https://gist.github.com/branneman/8048520
这已经有一段时间了,但我想在这里分享我的解决方案,以防万一,以上所有解决方案都不适用于您的特定情况。我一直在寻找一种解决方案来修复我们的单元测试,它失败了“错误:找不到模块 'components/shared/xyz',我们的 'components' 文件夹在 'client/src' 文件夹下,所以我想出了以下解决方案这对我们有用。
npm install babel-plugin-module-resolver --save-dev
{
'plugins': [
'babel-plugin-module-resolver',
{ 'root': ['client/src'] }
]
}
我在使用 Enzyme 和 Mocha 测试我的 React 项目时遇到了很多麻烦。我有这样的测试:
import React from 'react';
import { expect } from 'chai';
import { shallow } from 'enzyme';
import { ChipInput} from '../client/components/Chips';
describe('<ChipInput />', _ => {
it('rocks', done => {
done();
});
});
并且当 ChipInput
被导入时,该文件会导入带有绝对路径的内容,例如/lib/collections/tags
,然后 Mocha 出错了,因为它显然只执行相对路径。我如何让它工作?
编辑:
实际错误:
Error: Cannot find module '/lib/collections/tags'
发生这种情况是因为 /tests/ChipInput-test.js
从 /client/components/Chips/index.js
导入了 ChipInput
组件,其中包含以下几行:
import React from 'react';
import {
MapsLocalOffer as TagIcon,
ImageRemoveRedEye as InsightIcon,
EditorInsertChart as TestIcon,
SocialPerson as UserIcon,
} from 'material-ui/svg-icons';
import { Tag } from '/lib/collections/tags'; // error thrown here
import { Insight } from '/lib/collections/insights';
// import { Test } from '/lib/collections/tests';
import Chip from './Chip';
import ChipDisplay from './ChipDisplay';
import ChipInput from './ChipInput';
import * as chipTypes from './chip-types';
这是解决方案,既好又简单!
https://github.com/mantrajs/babel-root-slash-import
基本上,安装所述包:
npm install babel-root-slash-import --save-dev
将插件添加到 .babelrc
:
{
"plugins": [
"babel-root-slash-import"
]
}
一切顺利。
对于从 google 访问这里的任何人,虽然 ffxsam 的答案会起作用,但有很多方法可以实现这一点。 Node 的 require 允许通过环境变量或以编程方式设置基数,允许不需要前导斜杠的简单绝对路径(require("my/module");
vs require("/my/module");
)。
我使用 gulp 作为 taskrunner,所以我的首选技术是使用 app-module-path
在我的 gulp 文件的顶部执行以下操作(这在任何地方都有效,所以只要你还没有遇到任何绝对 require
s):
require('babel-core/register'); //for mocha to use es6
require('app-module-path').addPath(__dirname + '/src'); //set root path
//I also use webpack to pull in other extensions, so I
//want mocha to noop out on them
require.extensions['.css'] = _.noop;
require.extensions['.scss'] = _.noop;
require.extensions['.png'] = _.noop;
require.extensions['.jpg'] = _.noop;
require.extensions['.jpeg'] = _.noop;
require.extensions['.gif'] = _.noop;
要获得更完整的摘要,请查看 github 用户 branneman 的要点:https://gist.github.com/branneman/8048520
这已经有一段时间了,但我想在这里分享我的解决方案,以防万一,以上所有解决方案都不适用于您的特定情况。我一直在寻找一种解决方案来修复我们的单元测试,它失败了“错误:找不到模块 'components/shared/xyz',我们的 'components' 文件夹在 'client/src' 文件夹下,所以我想出了以下解决方案这对我们有用。
npm install babel-plugin-module-resolver --save-dev
{
'plugins': [
'babel-plugin-module-resolver',
{ 'root': ['client/src'] }
]
}