### 彪哥

爱好前端

- 初识 TypeScript

- TypeScript 常用语法

- ts-axios 项目初始化

- ts-axios 基础功能实现

- ts-axios 异常情况处理

- ts-axios 接口扩展

- ts-axios 拦截器实现

- ts-axios 配置化实现

- ts-axios 取消功能实现

- ts-axios 更多功能实现

- ts-axios 单元测试

  - 前言
  - Jest 安装和配置
  - 辅助模块单元测试
  - 请求模块单元测试
  - headers 模块单元测试
  - Axios 实例模块单元测试
    - 测试代码编写
  - 拦截器模块单元测试
  - mergeConfig 模块单元测试
  - 请求取消模块单元测试
  - 剩余模块单元测试

- ts-axios 部署与发布

- 《TypeScript 从零实现 axios》
- ts-axios 单元测试

HuangYi
2020-01-05
目录

# Axios 实例模块单元测试

# # Axios 实例模块单元测试

`ts-axios` 提供了 `axios.create` 静态方法，返回一个 `instance` 实例，我们需要对这个模块做测试。

## # 测试代码编写

`test/instance.spec.ts`：

    import axios, { AxiosRequestConfig, AxiosResponse } from '../src/index'
    import { getAjaxRequest } from './helper'

    describe('instance', () => {
      beforeEach(() => {
        jasmine.Ajax.install()
      })

      afterEach(() => {
        jasmine.Ajax.uninstall()
      })

      test('should make a http request without verb helper', () => {
        const instance = axios.create()

        instance('/foo')

        return getAjaxRequest().then(request => {
          expect(request.url).toBe('/foo')
        })
      })

      test('should make a http request', () => {
        const instance = axios.create()

        instance.get('/foo')

        return getAjaxRequest().then(request => {
          expect(request.url).toBe('/foo')
          expect(request.method).toBe('GET')
        })
      })

      test('should make a post request', () => {
        const instance = axios.create()

        instance.post('/foo')

        return getAjaxRequest().then(request => {
          expect(request.method).toBe('POST')
        })
      })

      test('should make a put request', () => {
        const instance = axios.create()

        instance.put('/foo')

        return getAjaxRequest().then(request => {
          expect(request.method).toBe('PUT')
        })
      })

      test('should make a patch request', () => {
        const instance = axios.create()

        instance.patch('/foo')

        return getAjaxRequest().then(request => {
          expect(request.method).toBe('PATCH')
        })
      })

      test('should make a options request', () => {
        const instance = axios.create()

        instance.options('/foo')

        return getAjaxRequest().then(request => {
          expect(request.method).toBe('OPTIONS')
        })
      })

      test('should make a delete request', () => {
        const instance = axios.create()

        instance.delete('/foo')

        return getAjaxRequest().then(request => {
          expect(request.method).toBe('DELETE')
        })
      })

      test('should make a head request', () => {
        const instance = axios.create()

        instance.head('/foo')

        return getAjaxRequest().then(request => {
          expect(request.method).toBe('HEAD')
        })
      })

      test('should use instance options', () => {
        const instance = axios.create({ timeout: 1000 })

        instance.get('/foo')

        return getAjaxRequest().then(request => {
          expect(request.timeout).toBe(1000)
        })
      })

      test('should have defaults.headers', () => {
        const instance = axios.create({ baseURL: 'https://api.example.com' })

        expect(typeof instance.defaults.headers).toBe('object')
        expect(typeof instance.defaults.headers.common).toBe('object')
      })

      test('should have interceptors on the instance', done => {
        axios.interceptors.request.use(config => {
          config.timeout = 2000
          return config
        })

        const instance = axios.create()

        instance.interceptors.request.use(config => {
          config.withCredentials = true
          return config
        })

        let response: AxiosResponse
        instance.get('/foo').then(res => {
          response = res
        })

        getAjaxRequest().then(request => {
          request.respondWith({
            status: 200
          })

          setTimeout(() => {
            expect(response.config.timeout).toEqual(0)
            expect(response.config.withCredentials).toEqual(true)
            done()
          }, 100)
        })
      })

      test('should get the computed uri', () => {
        const fakeConfig: AxiosRequestConfig = {
          baseURL: 'https://www.baidu.com/',
          url: '/user/12345',
          params: {
            idClient: 1,
            idTest: 2,
            testString: 'thisIsATest'
          }
        }
        expect(axios.getUri(fakeConfig)).toBe(
          'https://www.baidu.com/user/12345?idClient=1&idTest=2&testString=thisIsATest'
        )
      })
    })

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156

至此我们完成了 `ts-axios` 库 `Axios` 实例模块相关业务逻辑的测试，下一节课我们会对拦截器模块做测试。

编辑
(opens new window)
#TypeScript
上次更新: 2022/12/14, 19:36:42
headers 模块单元测试
拦截器模块单元测试

← headers 模块单元测试 拦截器模块单元测试→

最近更新

  01
Git修改分支名
08-11

  02
CSS给table的tbody添加滚动条
06-29

  03
我做了一个手写春联小网页，祝大家虎年暴富 原创
01-28

更多文章>

Copyright © 2016-2022 Hesb | MIT License

- 跟随系统
- 浅色模式
- 深色模式
- 阅读模式