Axios 实例模块单元测试
ts-axios
提供了 axios.create
静态方法,返回一个 instance
实例,我们需要对这个模块做测试。
测试代码编写
test/instance.spec.ts
:
typescript
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'
)
})
})
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'
)
})
})
至此我们完成了 ts-axios
库 Axios
实例模块相关业务逻辑的测试,下一节课我们会对拦截器模块做测试。