用supertest进行API测试

目录

在node开发中,写完了API接口之后,往往都要进行测试,现在常用的测试模块一般都是mochachai, 然后我们应该有相配合的请求模块来帮助我们更好地完成断言的工作,今天要介绍的主角就是supertest

用过superagent的童鞋应该都知道,supertest的用法同样简洁优雅,本文环境基于Express,废话不说,上实战代码

GET 请求

const assert = require('chai').assert;
const request = require('supertest');
const should = require('should');
const app = require('../../app');
const _ = require('lodash');
// 将supertest设成request是习惯使然

// 断言
describe("get /", function() {
    // it描述了API的功能,预期的返回内容
    it("should respond with ....", function() {
        // 使用supertest进行GET请求,并验证其返回的状态码
        return request(app).get('/')
            .set('Accept', 'application/json')  //设置请求头
            .expect(200)    //预期的状态码
            .then(function(res) {
                assert.notEqual(_.findIndex(res.body, {
                    // 使用assert断言库进行断言,如果lodash找不到json中的最外层的键值对(找里面的话可以在body的基础上继续访问)
                    // 使用equal或者是to.include.keys('key')也是可以的
                    'key' : 'value'
                }), -1);
            })
    })
}

POST 请求

// 前面不再赘述,我们专注于supertest
return request(app).post('/search')
        .send({ key: 'value' })     // x-www-form-urlencoded
        .field('name', 'Jack')      // form-data
        .attach('avatar', 'test/fixtures/homeboy.jpg')  // post上传附件

PUT或DELETE请求

同理

request(app).del('/path')
request(app).put('/path')