在 Jest 测试套件中访问 localStorage

时间:2021-03-18 15:50:23

标签: javascript reactjs rest jestjs

我想用我的前端 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 字符串只是为了该测试?

0 个答案:

没有答案
相关问题