Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.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
jest在jquery选择器上调用的第三方函数上失败_Jquery_Reactjs_Jestjs - Fatal编程技术网

jest在jquery选择器上调用的第三方函数上失败

jest在jquery选择器上调用的第三方函数上失败,jquery,reactjs,jestjs,Jquery,Reactjs,Jestjs,我有一个react组件,它调用jQuery选择器上的datatables.js函数的dataTable()。我还为该组件提供了相应的jest测试组件,但是,在抛出以下错误的函数上测试失败 ● 组件››检查道具是否匹配 TypeError:(0,jquery2.default)(…)。dataTable不是函数 Page.jsreact组件 import'datatables.net se' 类页面扩展组件{ componentDidMount(){ $('.table').dataTable()

我有一个react组件,它调用
jQuery
选择器上的
datatables.js
函数的
dataTable()。我还为该组件提供了相应的jest测试组件,但是,在抛出以下错误的函数上测试失败

● 组件››检查道具是否匹配
TypeError:(0,jquery2.default)(…)。dataTable不是函数

Page.jsreact组件

import'datatables.net se'
类页面扩展组件{
componentDidMount(){
$('.table').dataTable()
}
}
Page.test.jsjest组件(在it块中测试失败)

从“React”导入React
从“react redux”导入{Provider}
从“react router dom”导入{BrowserRouter}
从“酶”导入{configure,shall,mount}
从“redux模拟存储”导入configureMockStore
从“redux thunk”导入thunk
导入“datatables.net se”
mock('datatables.netse',()=>({dataTable:jest.fn()}))
//组成部分
从“../../components/Customers/Page”导入页面
//设置
const middleware=[thunk]//添加像'redux thunk'这样的中间件`
const mockStore=configureMockStore(中间件)
让存储、道具、组件、包装
描述(“,函数(){
在每个之前(()=>{
常数storeStateMock={
顾客:顾客
}
store=mockStore(storeStateMock)
道具={
fetchCustomers:jest.fn()
}
包装器=mount()
})
它('呈现连接的组件',函数(){
expect(wrapper.find(Page.length).toEqual(1)
})
})
}

您似乎仍然需要将装载的组件附加到jsdom环境,以便jquery能够找到它。请参见

在尝试了各种备选方案之后,我通过将
dataTable
函数附加到
jQuery
上,通过了测试,如下所示。在应用程序方面,这没有任何区别;我可以将
dataTable
导入为
import'datatables.net se'
$.fn.dataTable=require('datatables.net')
,在这两种情况下它仍然有效

页面组件

$.fn.dataTable = require('datatables.net')

class Page extends Component {

  componentDidMount() {    
    $('.table').dataTable()
  }
 }
 

jQuery是由jest和其他组件的测试发现的,这些组件使用jQuery或不使用jQuery。问题是jest找不到其他需要附加到jquery选择器函数的第三方函数。我有一些调整,似乎可以解决这个问题,我将在这里回答以及。但是,我仍然不确定这是否是解决问题的正确方法。@bir_-ham:我也遇到了同样的问题,那么您是如何解决的?使用解决方案时,我遇到了错误DataTables不是函数,但我没有遇到问题
table.buttons()
不是函数。你也遇到过吗?@DanielButler不太记得了,因为我已经有一段时间没有面对这个错误了。但是,我想我的问题通过我在这里提出的解决方案得到了解决。
$.fn.dataTable = require('datatables.net')

class Page extends Component {

  componentDidMount() {    
    $('.table').dataTable()
  }
 }