Supertest - 如何使用 POST 创建新记录,然后将其取回 GET - 异步系列
Supertest - how to create new record with POST, then get it back GET - async series
我有一个测试创建了一个新的 "municipality" 记录,并通过 POST 调用 API... 然后在同一个测试中,我想取回它并查看是否创建成功。问题是,我认为它恢复得太快了(在成功创建记录之前)。我该如何解决?在 POST 完成之前,我不想调用 "GET"。
我的测试是这样的:
it('Insert random muncipality with name of APIAutomation-CurrentDateTime', function (done) {
let newMuncID = 0;
//create a random string first for the name.
var currentDateTime = new Date().toLocaleString();
api.post('/rs/municipalities')
.set('Content-Type', 'application/json')
.send({
"muncplName": "APIAutomation-" + currentDateTime,
"effDate": "2018-01-25",
"provId": 8
})
.end(function (err, res) {
expect(res).to.have.property('status', 200);
expect(res.body).to.have.property('provId', 8);
newMuncID = res.body.muncplId;
done();
});
//Now, query it back out again
api.get('/rs/municipalities/' + newMuncID)
.set('Content-Type', 'application/json')
.end(function (err, res) {
expect(res.body).to.have.property("provId", 8);
done();
});
});
初始化此代码如下所示:
import {expect} from 'chai';
import 'mocha';
import {environment} from "../envConfig"
var supertest = require("supertest");
var tags = require('mocha-tags');
var api = supertest(environment.URL);
我使用 Async package 找到了一个很好的解决方案。它允许您连续进行 API 次调用。您可以让它等待答案返回后再执行下一个测试。
代码最终看起来像这样:
it('Change a municipality name', function (done) {
async.series([
function(cb) { //First API call is to get the municipality
api.get('/rs/municipalities/' + muncToBeAltered)
.set('Content-Type', 'application/json')
.end(function (err, res) {
actualVersion = res.body.version;
cb();
});
}, //end first - GET API call
function(cb) { //second API call is to make a change
api.put('/rs/municipalities/' + muncToBeAltered)
.set('Content-Type', 'application/json')
.send({
"muncplName": newMuncName,
"provId": "3",
"status": "01",
"version": actualVersion
})
.end(function (err, res) {
expect(res).to.have.property('status', 200);
cb();
});
}, //end second - PUT API call
], done);
});
我有一个测试创建了一个新的 "municipality" 记录,并通过 POST 调用 API... 然后在同一个测试中,我想取回它并查看是否创建成功。问题是,我认为它恢复得太快了(在成功创建记录之前)。我该如何解决?在 POST 完成之前,我不想调用 "GET"。
我的测试是这样的:
it('Insert random muncipality with name of APIAutomation-CurrentDateTime', function (done) {
let newMuncID = 0;
//create a random string first for the name.
var currentDateTime = new Date().toLocaleString();
api.post('/rs/municipalities')
.set('Content-Type', 'application/json')
.send({
"muncplName": "APIAutomation-" + currentDateTime,
"effDate": "2018-01-25",
"provId": 8
})
.end(function (err, res) {
expect(res).to.have.property('status', 200);
expect(res.body).to.have.property('provId', 8);
newMuncID = res.body.muncplId;
done();
});
//Now, query it back out again
api.get('/rs/municipalities/' + newMuncID)
.set('Content-Type', 'application/json')
.end(function (err, res) {
expect(res.body).to.have.property("provId", 8);
done();
});
});
初始化此代码如下所示:
import {expect} from 'chai';
import 'mocha';
import {environment} from "../envConfig"
var supertest = require("supertest");
var tags = require('mocha-tags');
var api = supertest(environment.URL);
我使用 Async package 找到了一个很好的解决方案。它允许您连续进行 API 次调用。您可以让它等待答案返回后再执行下一个测试。
代码最终看起来像这样:
it('Change a municipality name', function (done) {
async.series([
function(cb) { //First API call is to get the municipality
api.get('/rs/municipalities/' + muncToBeAltered)
.set('Content-Type', 'application/json')
.end(function (err, res) {
actualVersion = res.body.version;
cb();
});
}, //end first - GET API call
function(cb) { //second API call is to make a change
api.put('/rs/municipalities/' + muncToBeAltered)
.set('Content-Type', 'application/json')
.send({
"muncplName": newMuncName,
"provId": "3",
"status": "01",
"version": actualVersion
})
.end(function (err, res) {
expect(res).to.have.property('status', 200);
cb();
});
}, //end second - PUT API call
], done);
});