mock module which does not exist?

旧时模样 提交于 2019-12-11 05:59:31

问题


When i run my mocha tests in my meteor app by:

node_modules/.bin/mocha --compilers js:babel-core/register //..opts

i get a problem when my module under test wants to import:

import { Meteor } from 'meteor/meteor';

So i tried to mock it with mockery:

mockery.enable();
moduleUnderTest = '../moduleUnderTest';
mockery.registerAllowable(moduleUnderTest);
meteorMock = {};
mockery.registerMock('Meteor', meteorMock);

Unfortunately the module cannot be found

Error: Cannot find module 'meteor/meteor'

So the mocking of Meteor cannot be done.

Is there a way how i can fake the location meteor/meteor?
(Alternate Solution: If i can get access to the Meteor Environment in my mocha test)


回答1:


If you look at the documentation, you'll see that .registerAllowable takes a string, not a module. You also need to give the exact module name that you are mocking, and provide a fake module with the values you want.

So:

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);

If you think about it, what you were doing cannot work. You were requiring the module before Mockery is configured for mocking 'Meteor', so Node loads your module, and then tries to load Meteor before the mock is available, and you get a failure.

Moreover, Meteor mocks modules so when you register a mock, you have to give a module name, not the name of a variable.



来源:https://stackoverflow.com/questions/46952843/mock-module-which-does-not-exist

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!