我有一个测试,通过对API的POST调用创建一个新的“市政”记录...然后在同一个测试中,我想要回来查看它是否已成功创建。问题是,我认为它恢复得太快(在成功创建记录之前)。我该如何解决这个问题?我不希望在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);
答案 0 :(得分:0)
我使用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);
});