当我在我的流星应用程序中运行我的mocha测试时:
node_modules/.bin/mocha --compilers js:babel-core/register //..opts
当我的测试模块要导入时出现问题:
import { Meteor } from 'meteor/meteor';
所以我试图用嘲弄来嘲笑它:
mockery.enable();
moduleUnderTest = '../moduleUnderTest';
mockery.registerAllowable(moduleUnderTest);
meteorMock = {};
mockery.registerMock('Meteor', meteorMock);
不幸的是找不到模块
Error: Cannot find module 'meteor/meteor'
因此无法完成对流星的嘲弄。
我有办法伪造位置meteor/meteor
吗?
(替代解决方案:如果我可以在我的摩卡测试中访问流星环境)
答案 0 :(得分:3)
如果查看documentation,您会看到.registerAllowable
需要字符串,而不是模块。您还需要提供您正在模拟的确切模块名称,并提供一个假模块,其中包含您想要的值。
所以:
var mockery = require("mockery");
mockery.enable();
mockery.registerAllowable("./moduleUnderTest");
// We want Meteor to have the value "foo". You probably want something
// different.
var meteorMock = { Meteor: "foo" };
// We mock 'meteor/meteor' because that's what's imported.
mockery.registerMock('meteor/meteor', meteorMock);
如果你仔细想想,你所做的事情就行不通。在 Mockery配置为模拟'Meteor'
之前,你需要模块,所以Node加载你的模块,然后在模拟可用之前尝试加载Meteor,你就会失败。
此外,Meteor模拟模块,因此当您注册模拟时,您必须提供模块名称,而不是变量名称。