我正在尝试使用babel-plugin-rewire模拟另一个文件中的函数。此功能不会导出,但会从该文件的默认导出中调用。
流星1.6.1
“ babel-plugin-rewire”:“ ^ 1.2.0”
meteortesting:mocha@1.1.2
在我应用的package.json中:
"babel": {
"presets": ["latest", "meteor"],
"env": {
"test": {
"plugins": [
"babel-plugin-rewire"
]
}
}
}
在我的parentFunction.js中:
import { some function } from 'anotherFile';
function childFunction() {
...
return someValue;
}
export default function parentFunction() {
return childFunction()
}
在我的测试文件中:
import { childFunction, __RewireAPI__ as MyRewireAPI } from './parentFunction'; // eslint-disable-line import/named
if (Meteor.isServer) {
...
describe('parentFunction', () => {
it('uses the mocked child function', () => {
MyRewireAPI.__Rewire__('childFunction', function () {
return Promise.resolve({ 'name': 'bob' });
});
});
});
}
当我使用此命令运行测试时:
TEST_WATCH=1 meteor test --driver-package meteortesting:mocha
我所有其他测试均通过,但该测试失败并显示以下错误:
TypeError: Cannot read property '__Rewire__' of undefined
我以为rewire的重点是它从文件中获取了非导出模块,所以这是否意味着rewire没有运行?将重接线插件与Meteor的内置babel连接是否还需要做些其他事情?
我已阅读文档并查找其他类似问题,但看不到我在做什么错。对于我在这里缺少的简单内容的建议,我将深表感谢。
编辑:我意识到我没有将BABEL_ENV环境变量设置为'test',但是现在我可以了,它仍然不起作用。
答案 0 :(得分:1)
今天我也没有用运气尝试过与Meteor重新接线。
这可能是一个很好的选择。 只是有条件地导出被测函数,如下所示:
import { some function } from 'anotherFile';
function childFunction() {
...
return someValue;
}
export default function parentFunction() {
return childFunction()
}
if (Meteor.isTest || Meteor.isAppTest) {
module.exports = { childFunction };
}