如何在流星中启用babel-plugin-rewire

时间:2019-03-26 09:27:00

标签: javascript testing meteor mocha

我正在尝试使用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',但是现在我可以了,它仍然不起作用。

1 个答案:

答案 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 };
}