jest在jquery选择器上调用的第三方函数上失败
我有一个react组件,它调用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()
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()
}
}