首页 > 解决方案 > TypeError:module.Name.replace 不是函数

问题描述

我是单元测试的新手,我无法为以下内容识别/设置正确的道具:js file REACT / JS jest/enzyme

populateModuleDropdown = (moduleList) => {
  let modules = moduleList.map(module => {
    return (
      <DropdownItem key={module.ModuleId} onClick={() => {
      this.props.setTarget(null);
      }}>
      <Link className='full-link'
      onClick={e => {if(this.props.module.moduleId === module.ModuleId){e.preventDefault()}}}
      to={'/'+module.Name.replace(/ /g,'')}>
      {module.Name}
      </Link>
      </DropdownItem>
    )
  })
}

我做了一些类似的文件,它们看起来都很好并且可以正确传递,但是无法识别和修复以下错误。请看一下 let mockmodules

测试.js

configure({adapter: new Adapter()});

describe(' testing  ', () => {

  let tree;
  let baseProps;
  let mockdefaultData;
  let mockmodule = {
    Name:"test",
    moduleId:{},

    beforeEach(() => {
      module : mockmodule,

      it (' Should render without a Module props',() => {
        baseProps = {
          ...baseProps,
          module: {},
        };
        // code
      });

      it(' Should render with ALL of the props', () => {
        //code

      });
    })
  }
})

标签: javascriptreactjsunit-testing

解决方案


嗯,这个错误意味着你所指的对象,在这种情况下 module.Name——没有replace函数。要问的问题可能会解决您的问题:

  1. 您要引用的预期模块是什么?尝试做一个console.log(module.Name)看看它是否是你所期望的。

如果您尝试使用 JS 的内置字符串替换方法,那么您还需要检查 是否typeof(module.Name)是字符串。如果是,请按照此处的字符串替换方法的文档:https ://www.w3schools.com/jsref/jsref_replace.asp

如果不是,您可能需要回溯以确保您拥有正确的数据。

假设module.Name实际上是一个字符串,它的用法如下:

module.Name = module.Name.replace(/ /g, '');

推荐阅读