我有一个使用自定义 dataProvider 的模式组件,它的功能需要两种不同的资源,并为这两种资源创建数据。
主要功能看起来像这样(我省略了模式代码,它是一个由 MUI 多选自动完成输入组成的 MUI 对话框):
const dataProvider = useDataProvider()
const createAndAddToPlaylist = (playlistObject) => {
dataProvider
.create('playlist', {
data: { name: playlistObject.name },
})
.then((res) => {
addToPlaylist(res.data.id)
})
.catch((error) => notify(`Error: ${error.message}`, 'warning'))
}
const addToPlaylist = (playlistId, distinctIds) => {
dataProvider
.create('playlistTrack', {
data: { ids: distinctIds },
filter: { playlist_id: playlistId },
})
.then(() => {
// success callbacks
})
.catch(() => {
// error handling
})
}
const handleSubmit = (e) => {
value.forEach((playlistObject) => {
if (playlistObject.id) {
addToPlaylist(playlistObject.id, playlistObject.distinctIds)
} else {
createAndAddToPlaylist(playlistObject)
}
})
}
我需要帮助编写一个测试,该测试将测试(a)数组中的任何一个是否具有它成功创建资源的playlistObject
属性,以及(b)如果它没有该属性,它会成功创建资源并随后创建资源。我还需要将创建的数据用作我的自动完成输入中的选项,所以我不能只期望调用。我需要创建数据并将其呈现为输入中的选项。values
id
playlistTrack
playlist
playlistObject
我正在为此使用反应测试库。我已经这样包装了我的组件:
const testutils = render(
<DataProviderContext.Provider value={dataProvider}>
<TestContext
initialState={{
admin: {
ui: { optimistic: false },
resources: { playlist: { data: { 1: { id: 1, name: 'addt', }, }, }, },
},
}}
>
<AddToPlaylistDialog />
</TestContext>
</DataProviderContext.Provider>
)
我的自定义 dataProvider在哪里dataProvider
,但它不起作用,它似乎没有在资源上“创建”(或执行任何查询)。
在这种情况下进行测试的正确方法是什么,以及如何进行?我在这个问题上被困了很长一段时间,所以任何帮助都将不胜感激!