在模拟阿波罗反应测试中使用随机变量会产生"Error: No more mocked responses for the query"错误



在React和GraphQL项目中,我有一个突变,看起来像这样:

const variables: {
id: faker.random.uuid(),
//other info
}
client.mutate({
mutation: CREATE_PERSON,
variables,
update: updateFct
}).then(result => {
// do something with the result
})
}).catch(error => {
//do something with error
});

我正在使用官方文档中描述的@apolo/react测试来测试它。

我使用的模拟像这样:

const mocks = [
{
request: {
query: CREATE_PERSON,
variables: {
id: 'd6d98b88-c866-4496-9bd4-de7ba48d0f52'
// other info
}
},
result: {
data: {
createPerson {
id: 'd6d98b88-c866-4496-9bd4-de7ba48d0f52',
// other info
}
}
}
}
];

我知道问题的根源:事实上,在生产代码中,我使用了一个随机的UUID,当我启动测试时,我得到了一个著名的错误:

错误:查询没有更多模拟响应。。。

我熟悉解决这个错误(比如处理__typename…等等(,但在这种情况下,我知道我的问题与变量中使用随机UUID有关,我可以通过替换行来确认

const variables: {
id: faker.random.uuid(),
//other info
}

带有

const variables: {
id: 'd6d98b88-c866-4496-9bd4-de7ba48d0f52',
//other info
}

和我的测试通过(但这当然不是目标,我需要使用一个随机变量值(。

对这样的用例有任何反馈或过去的经验吗?

由于问题是faker.random.uuid返回一个随机id,因此可以模拟该模块以返回一个设置值。

开玩笑地说,你可以通过设置一个模拟模块来实现。例如,如果使用npmfaker包:

// __mocks__/faker.js
module.exports = {
random: {
uuid: () => 'some-random-uuid',
}
}

现在,当您的测试正在运行时,函数调用faker.random.uuid()并获得'some-random-uuid'。在测试中,您可以调用该模块,还可以接收模拟值:

import faker from 'faker'
const variables: {
id: faker.random.uuid(), // returns 'some-random-uuid'
//other info
}

相关内容

最新更新