我想用我的前端 React 应用程序测试后端集成和响应数据结构。我有一个 api.js 文件
export const threadAPI = {
getThreads() {
return instance.get(`chaddit/c/search/threads`).then(response => response.data);
}}
export const chatAPI = {
getChats() {
return instance.get(`chaddit/c/chats`, {
headers: {
'api_token': localStorage.getItem('api_token'),
}
}).then(response => {
return response.data
});
}}
在我的 App.test.js 中,我使用以下命令测试 getThreads() 调用:
test('getThreads() request/response test', () =>{
return threadAPI.getThreads().then(data => {
data.forEach((thread) => {
expect(thread).toHaveProperty('active', true)
expect(thread).toHaveProperty('author')
expect(typeof thread.author).toBe('object')
expect(thread).toHaveProperty('author_id')
expect(typeof thread.author_id).toBe('number')
expect(thread).toHaveProperty('created_at')
expect(typeof thread.created_at).toBe('string')
expect(thread).toHaveProperty('image')
expect(typeof thread.image === 'string' || typeof thread.image === 'object').toBeTruthy()
expect(thread).toHaveProperty('posts')
expect(typeof thread.posts).toBe('object')
expect(thread).toHaveProperty('posts_count')
expect(typeof thread.posts_count).toBe('number')
expect(thread).toHaveProperty('thread_id')
expect(typeof thread.thread_id).toBe('number')
expect(thread).toHaveProperty('thread_title')
expect(typeof thread.thread_title).toBe('string')
expect(thread).toHaveProperty('topic_id')
expect(typeof thread.topic_id).toBe('number')
expect(thread).toHaveProperty('updated_at')
expect(typeof thread.updated_at).toBe('string')
expect(thread).toHaveProperty('views')
})
})
})
它按预期工作。但是我无法以相同的方式测试 getChats(),因为它根据用户的 api 令牌返回动态数据。由于这是我的宠物项目,隐私不是问题,因此我想学习如何使用标头中的隐藏属性测试请求函数。
现在我的想法是在 App.test.js 中创建一个重复的函数,并且已经填充了 api_token 字段:
getChatsTest() {
return instance.get(`chaddit/c/chats`, {
headers: {
'api_token': 'there goes my api token',
}
}).then(response => {
return response.data
});
然后测试那个。这是执行此测试的最佳方法吗?也许,有一种方法可以调用原始函数,但是将 localStorage.getItem('api_token')
替换为 api_token 字符串只是为了该测试?