Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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 如何将外部信息从网页传递到笑话?_Javascript_Unit Testing_Reactjs_Webpack_Jestjs - Fatal编程技术网

Javascript 如何将外部信息从网页传递到笑话?

Javascript 如何将外部信息从网页传递到笑话?,javascript,unit-testing,reactjs,webpack,jestjs,Javascript,Unit Testing,Reactjs,Webpack,Jestjs,作为grunt构建过程的一部分,我已经拥有了这个网页配置: module.exports = { options: { output: { path: path.resolve('../ui/static/js'), filename: '[name].js', chunkFilename: '[id].[name].js', libraryTarget: 'amd', library: '[name]'

作为grunt构建过程的一部分,我已经拥有了这个网页配置:

module.exports = {
options: {
    output: {
        path: path.resolve('../ui/static/js'),
        filename: '[name].js',
        chunkFilename: '[id].[name].js',
        libraryTarget: 'amd',
        library: '[name]'
    },

    externals: [
        'jquery',
        'lodash',
        'backbone',
        'backbone.layoutmanager',
        'moment',
        'spin',
        'lib/select2.min',
        'dispatcher'
    ],
    resolve: {
        root: path.resolve('../ui'),
        alias: {
            'jst': 'static/jst'
        }
    }
我们现在正在采取行动作出反应,我需要在我的测试文件中导入一些文件,其中包括这些依赖项,但jest找不到它们:

Cannot find module 'lib/select2.min' from 'helpers.js'
Cannot find module 'jst/templates_jst' from 'base-view.js

解决此问题的正确方法是什么?

您需要模拟外部库

jquery的示例:

  • 在同一级别的测试文件夹中创建一个模拟文件夹
  • 在其中,创建一个与依赖项同名的文件,在本例中为jquery(jquery.js)
  • 在测试文件中,使用jest.mock函数引用mock外部依赖项:jest.mock('jquery') 文件中的笑话:


    希望它能有所帮助。

    以下是今天使用的
    webpack@4.11.1
    jest@23.1.0
    。假设这是您的外部网页包配置:

    externals: {
      react: {
        root: 'React',
        commonjs2: 'react',
        commonjs: 'react',
        amd: 'react',
      },
    }
    
    您需要映射每个外部库,以便在jest配置中正确解析,如下所示:

    moduleNameMapper: {
      "^./react": path.resolve(__dirname, 'node_modules/react'),
    }
    
    调试问题时,请确保检查生成的组件文件的外观。您希望确保看到以下内容:

    !function(e,t){if("object"==typeof exports&&"object"==typeof module)
    module.exports=t(require("react"));
    else if("function"==typeof define&&define.amd)define(["react"],t);
    else{var n="object"==typeof exports?t(require("react")):t(e.React);
    

    对于commonjs和amd来说,重要的一点是
    react
    ,对于浏览器来说是
    react

    对于我来说,使用
    \uuuuumocks\uuuu
    会有点冗长,但我使用了

    jest.mock('myModule', () => {/* module impl */}, {virtual: true})
    

    如果
    \uuuu mocks\uuuuu
    建议对您也进行详细说明,请查看文档

    您是否尝试使用安装文件导入这些软件包并附加到
    全局
    ?是的。它在我的模板上失败,包括在网页包中,如下所示:
    resolve:{root:path.resolve('../ui'),别名:{jst':'static/jst'}}}
    我开玩笑说:
    无法从'base view.js'中找到模块'jst/templates_jst'。
    我可以通过spin、jquery、,通过将它们添加到
    \uuumocks\uuuu
    文件夹中,我不知道如何处理
    jst/templates\ujst
    还有一种可能是使用virtualmock
    jest.mock('jst/templates\ujst',()=>{},{virtual:true})
    这将如何解决问题?如果我在测试中模拟react,它们将不再通过,因为我需要实际的react来呈现用于测试的组件。对于react,它当然没有帮助,在react作为外部库的情况下,您必须在依赖项中使用它。但是对于一些不影响测试的外部软件包来说,它非常有用,但是仍然需要安装它才能解决导入和编译问题。这里的mocks非常适合。这太棒了,我在我执行的任何web搜索中都没有看到提到这一点,而且这对外部库非常有效,我也不想在创建时如此冗长,谢谢