6

我有一个看起来像这样的节点 js 模块

"use strict";

var debug = require('debug')('foo');

var Foo = function() {
  this.x = 123;
  debug("init");
};

module.exports = Foo;

我的测试看起来像这样

jest.dontMock('../lib/foo');
jest.dontMock('debug');

describe('footest', function() {
 it('checks the foo', function() {
   var Foo = require('../lib/foo');
   var foo = new Foo();
   expect(foo.x).toBe(123);
 });
});

但是当我开玩笑时

node node_modules/jest-cli/bin/jest.js 

我明白了

Found 1 matching tests...
 FAIL  __tests__/foo-test.js (0.02s)
? footest › it checks the foo
  - TypeError: /Users/gregg/src/jest-test/lib/foo.js: /Users/gregg/src/jest-test/node_modules/debug/node.js: Cannot read property 'buffer' of undefined
      at Socket.self [as bytesWritten] (net.js:688:8)
      at _getMetadata (/Users/gregg/src/jest-test/node_modules/jest-cli/src/lib/moduleMocker.js:279:49)
      at _getMetadata (/Users/gregg/src/jest-test/node_modules/jest-cli/src/lib/moduleMocker.js:286:23)
      at _getMetadata (/Users/gregg/src/jest-test/node_modules/jest-cli/src/lib/moduleMocker.js:279:27)
      at _getMetadata (/Users/gregg/src/jest-test/node_modules/jest-cli/src/lib/moduleMocker.js:279:27)
      at Object.module.exports.getMetadata (/Users/gregg/src/jest-test/node_modules/jest-cli/src/lib/moduleMocker.js:388:20)
      at Loader._generateMock (/Users/gregg/src/jest-test/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:280:56)
      at Loader.requireMock (/Users/gregg/src/jest-test/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:782:43)
      at Loader.requireModuleOrMock (/Users/gregg/src/jest-test/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:897:17)
      at /Users/gregg/src/jest-test/node_modules/debug/node.js:6:11
      at Object.runContentWithLocalBindings (/Users/gregg/src/jest-test/node_modules/jest-cli/src/lib/utils.js:309:17)
      at Loader._execModule (/Users/gregg/src/jest-test/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:243:9)
      at Loader.requireModule (/Users/gregg/src/jest-test/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:879:10)
      at Loader.requireModuleOrMock (/Users/gregg/src/jest-test/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:899:17)
      at /Users/gregg/src/jest-test/lib/foo.js:3:13
      at Object.runContentWithLocalBindings (/Users/gregg/src/jest-test/node_modules/jest-cli/src/lib/utils.js:309:17)
      at Loader._execModule (/Users/gregg/src/jest-test/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:243:9)
      at Loader.requireModule (/Users/gregg/src/jest-test/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:879:10)
      at Loader.requireModuleOrMock (/Users/gregg/src/jest-test/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:899:17)
      at Spec.<anonymous> (/Users/gregg/src/jest-test/__tests__/foo-test.js:7:14)
      at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)

如何让我开玩笑地忽略调试包,为什么当我告诉它不要时它似乎在模拟?

4

3 回答 3

3

现在 jest 0.1.18 中有一个错误(在此处修复在此处记录),其中核心节点模块不能被模拟。

一旦 facebook 接受拉取请求,这个问题就会消失。

在此之前,您可以将您的 package.json 指向修复的存储库:

"jest-cli": "git://github.com/adaschevici/jest.git#cf4c6ff97d7009ff8627dd7d3a59cfeff1f3c8b8"

这应该可以解决这个问题。

于 2014-09-08T23:24:40.883 回答
1

发生这种情况的原因是因为jest.dontMock('debug');只会阻止模拟调试模块的根文件,而所有其他内部仍然会被模拟。

一种可能的解决方案是防止使用unmockedModulePathPatterns配置选项模拟调试库:

在 package.json 中:
{
  "name": "...",
  "version": "0.0.0",
  ...
  "jest": {
    "unmockedModulePathPatterns": ["/node_modules/debug"]
  },
}
于 2014-07-21T21:36:30.350 回答
0

在测试文件的顶部,试试这个

    jest.autoMockOff(); 

然后手动模拟文件jest.mock(..)


更新:有一个不需要您关闭自动模拟的修复程序。tldr; 添加debug,ttynetto jest.unmockedModulePathPatternsinpackage.json

于 2015-02-04T20:28:30.887 回答