Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用require设置循环相关性的问题_Javascript_Ecmascript 5 - Fatal编程技术网

Javascript 使用require设置循环相关性的问题

Javascript 使用require设置循环相关性的问题,javascript,ecmascript-5,Javascript,Ecmascript 5,循环依赖是在Jest.js中模拟父函数中的子函数的一种方法。我已经看过关于如何使用循环导入的ES6示例,但是我在使用require将其转换为ES5语法时遇到了困难。以下是我所拥有的: const currentFile = require('./targetFile.js'); const a = () => { return currentFile.b(); }; const b = () => { return 'from b' }; module.exports

循环依赖是在Jest.js中模拟父函数中的子函数的一种方法。我已经看过关于如何使用循环导入的ES6示例,但是我在使用require将其转换为ES5语法时遇到了困难。以下是我所拥有的:

const currentFile = require('./targetFile.js');

const a = () => {
  return currentFile.b();
};

const b = () => {
  return 'from b'
};

module.exports = { a, b }
然后,我尝试在一个测试仪文件中运行上述代码,该文件要求将上述代码作为targetFile:

const targetFile = require("../targetFile.js");

test('a and b', () => {
  console.log(targetFile.a(), `=====targetFile.a()=====`);
});


 FAIL  views/admin/__tests__/targetFile.test.js
  ✕ a and b (12ms)

  ● a and b

    TypeError: currentFile.b is not a function

      26 | 
      27 | const a = () => {
    > 28 |   return currentFile.b();
         |                      ^
      29 | };
      30 | 
      31 | const b = () => {

使用requires(或其他与ES5浏览器兼容的语法)进行上述操作的正确语法是什么?

出于技术原因,
module.exports={}
语法不适用于循环依赖项。幸运的是,您可以使用
exports.a=a
语法,并像
const target=require('target');。。。。target.a()


总的来说,循环进口造成的麻烦比好的多,所以我建议避免它们。我也不明白为什么您需要循环导入进行测试,而您的示例也没有显示这一点。你能发布更多关于你的文件的细节吗

谢谢,我现在就来测试一下。请参阅此SO的顶部答案,了解为什么将循环导入与Jest一起使用: