bower - Jest 测试中的 Jest 和 Bower 模块加载

标签 bower browserify jestjs browserify-shim

假设我有一个使用 bower、grunt、bowerify(使用 shim)的项目,因为我非常喜欢 Jest,所以我想用它来测试。当我运行测试时,我怎么会 Jest 看到我的 browserify shim 模块。我使用 grunt 来启动 npm test 命令。
这是我的 package.json 文件。

"browser": {
    "jquery": "./bower_components/jquery/dist/jquery.js",
    "foundation": "./bower_components/foundation/js/foundation/foundation.js",
    "fastclick": "./bower_components/fastclick/lib/fastclick.js",
    "greensock-tm": "./bower_components/gsap/src/uncompressed/TweenMax.js",
    "greensock-css": "./bower_components/gsap/src/uncompressed/plugins/CSSPlugin.js",
    "greensock-time": "./bower_components/gsap/src/uncompressed/TimelineMax.js",
    "scrollmagic": "./bower_components/ScrollMagic/js/jquery.scrollmagic.js",
    "handlebars": "./bower_components/handlebars/handlebars.runtime.js"
  },
  "browserify-shim": {
    "jquery": "$",
    "greensock-css": "CSSPlugin",
    "fastclick": "FastClick",
    "greensock-tm": "TweenMax",
    "greensock-time": "TimelineMax",
    "scrollmagic": "ScrollMagic",
    "foundation": "foundation",
    "handlebars": "Handlebars"
  },
  "browserify": {
    "transform": [
      "browserify-shim"
    ]
  },

现在,在运行测试之前,我几乎可以通过在我的 grunt 文件中执行此操作来解决此问题。
grunt.registerTask("shimBowerForTests",function(){
    var readJson = require('read-package-json');
    var fs = require('fs');
    var remapify = require('remapify');
    readJson('./package.json', console.error, false, function (er, data) {
      if (er) {
        throw "There was an error reading the file";
      }
      var packages = data.browser;
      var browserify = require('browserify');
      for (var key in packages){
        var b = browserify();
        var wstream = fs.createWriteStream("devjs/test/modules/"+key+'.js');
        b.add(packages[key]);
        b.bundle().pipe(wstream);
      }
    });
  });

和。
exec: {
      jestTest: {
        command: 'cp -r devjs/modules devjs/test/modules && npm test'
      }
    }

问题是使用browserify,因此将浏览器的所有内容与我的设置结合起来效果很好,我可以像这样要求我的垫片模块。require('jquery') //example但是在 Jest cli 中,测试失败了,因为他们可以找到模块,除非我以某种方式在它前面加上 ./,就像这样 require('./jquery')

最佳答案

我猜问题是你只安装了带有 bower 的垫片模块。如果您希望它们在 node/jest 中工作,您还必须使用 npm 安装它们。然后确保 Jest 没有模拟 node_modules 目录中的任何内容,只要名称匹配,它就应该在那里找到所有必需的模块。

您在 package.json 中的 Jest 配置应该看起来像:

"jest": {
  "unmockedModulePathPatterns": [
    "./node_modules"
  ]
}

然后只需下载所有依赖项。
npm install jquery --save-dev

关于bower - Jest 测试中的 Jest 和 Bower 模块加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27322830/

相关文章:

javascript - 如何正确记录 require module.exports 以便文档不丢失?

javascript - expect(...).objectContaining 不是 Jest 中的函数

javascript - 开 Jest 单元测试: setTimeout not firing in async test

browserify - 为 Browserify 定义全局变量

node.js - 寻找 Angular2 MEAN 堆栈

javascript - 尝试使用 gruntjs 设置 Phaser 和 Typescript

github - 当 GitHub 上只有 README 更改时,我是否必须更新项目版本?

javascript - 在浏览器中使用 Node Rework CSS

reactjs - 为什么我的 Jest 测试在使用 Typescript 的 React Native 中失败?

node.js - Bower 未安装