【问题标题】:RequireJS + Mocha + JSDom + Node -> Shim config not supported in NodeRequireJS + Mocha + JSDom + Node -> Node 不支持 Shim 配置
【发布时间】:2021-09-16 18:23:54
【问题描述】:

我正在尝试使用带有 RequireJS 的 JSDom 设置 Mocha 测试框架。因为我在节点上运行测试而不是使用浏览器(因为我使用的是 JSDom),所以似乎没有导入所有非 AMD 模块并且正在抛出 Shim config not supported in Node。有谁知道我如何将这些模块导出到 AMD 或正确的方法是什么? (也就是我做错了什么)

我的设置示例

Component.js

define(["jquery", "non_AMD_Module", ... ], function($, NonAMDModule, ...) {
  let component = {
    ...
    foo = () => {
      NonAMDModule.bar();
    };
  };
  return component;
});

Component.test.js

const requirejs = require('requirejs');
const { JSDOM }  = require('jsdom');

requirejs.config({
  baseUrl: "dist/app",
  paths: {
    jquery: "lib/jquery",
    component: "path_to_component",
    non_AMD_Module: "path_to_module"
  },
  shim: {
    non_AMD_Module: { exports: "non_AMD_Module" } // This doesn't work
  }
});

const { window } = new JSDOM("<html></html>");
global.window = window;
global.document = window.document;
global.$ = requirejs('jquery');

const Component = requireJS('component');
describe('test', () => {
  it('is a simple test', () => {
     const testComponent = new Component();
     testComponent.foo();
  }
});

当我运行测试套件时,我得到:

Mocha Exploded!
  TypeError: Cannot read property 'bar' of undefined

运行 r.js -convert "path_to_module" 不适用于此模块

【问题讨论】:

    标签: node.js mocha.js requirejs amd jsdom


    【解决方案1】:

    查看 jQuery 的源代码,我发现有一个样板代码可以将其导出到 AMD。

    这可以添加到非 AMD 模块的底部,以便将其导出到 RequireJS 可访问的 AMD 模块

    if ( typeof define === "function" && define.amd ) {
      define([], function {
        return non_AMD_Module;
      });
    }
    

    其他资源:

    Shim a module in Require.js that uses module.exports possible?

    https://github.com/requirejs/requirejs/wiki/Updating-existing-libraries#anon

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-27
      • 2014-04-04
      • 1970-01-01
      • 1970-01-01
      • 2012-06-30
      • 2016-12-24
      • 2017-02-08
      • 2020-09-20
      相关资源
      最近更新 更多