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 = 2000return config})const instance = axios.create()instance.interceptors.request.use(config => {config.withCredentials = truereturn config})let response: AxiosResponseinstance.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 实例模块相关业务逻辑的测试,下一节课我们会对拦截器模块做测试。
