RN mock dismissKeyboard模块

时间:2016-04-26 11:58:57

标签: testing reactjs react-native mocha

在我的RN应用程序中,我将导入以下模块:

const dismissKeyboard = require('dismissKeyboard'); /
import dismissKeyboard from 'dismissKeyboard';

运行测试时出现以下错误:

Error: Cannot find module 'dismissKeyboard'
    at Function.Module._resolveFilename (module.js:339:15)
    at Function.Module._load (module.js:290:25)
    at Module.require (module.js:367:17)
    at require (internal/module.js:16:19)
    at Object.<anonymous> (InputAccessory.js:12:25)
    at Module._compile (module.js:413:34)
    at loader (/Users/user/dev/app/node_modules/babel-register/lib/node.js:126:5)

我曾尝试过sinon:

  before(() => {
    sinon.stub('dismissKeyboard', () => {});
  });

还有mockey:

mockery.enable();
mockery.mock('dismissKeyboard', () => null) /
mockery.registerMock('dismissKeyboard', () => null)

但我仍然得到同样的错误。

有什么建议吗? dismissKeyboard模块随RN一起提供,但不知何故需要单独使用。我正在使用摩卡。

更新

我发现dismissKeyboard来自

  

反应天然/库/公用设施/ dismissKeyboard.js

虽然在尝试模拟它时甚至使用此完整路径没有任何区别,但现在我收到有关此js文件中的模块的警告。

1 个答案:

答案 0 :(得分:1)

如果您使用require,则很容易使用mock-require进行模拟。虽然似乎不适用于es6导入。

var mock = require('mock-require');

mock('dismissKeyboard', function () {
  return 'I\'m a mocked function';
});

var dismissKeyboard = require('dismissKeyboard');

console.log(dismissKeyboard());

如果你想在你的所有测试中模拟它,请将它添加到你的安装文件中(或者如果你还没有创建一个),并在运行你的测试时使用它:

mocha --require setup.js tests