将摩卡 api 测试从异步等待转换为超级测试



我有以下问题,我开始编写API测试,现在看起来像:

xit('should add address ', async () => {
const result = await request({
headers: Object.assign(config.headers, { 'Authorization': 'Bearer '+auth_token }),
url: `${config.url}/rest/v1/address/`,
method: "POST",
json: {
"name": generatedAddressName,
"city": "WARSZAWA",
"street": "UL. KASPROWICZA",
"houseNumber": "49XX",
"apartNumber": "",
"lat": 52.176903,
"lng": 21.028369,
"zipCode": "02-732",
"isDefault": false,
"inDeliveryZone": true
}
});
});

现在我阅读有关超级测试库的信息,在超级测试下的测试看起来更具可读性,我想将我的测试用例转换为超级测试 我尝试这样做,没有任何效果,现在我有:

it('should add address supertest', function(done) {
request
.post('/rest/v1/address/')
.set(config.headers)
//.set('Accept', 'application/json')
.set('Authorization', 'Bearer ' + auth_token)    
.send({
"name": generatedAddressName,
"city": "WARSZAWA",
"street": "UL. KASPROWICZA",
"houseNumber": "51",
"apartNumber": "",
"lat": 52.176903,
"lng": 21.028369,
"zipCode": "02-732",
"isDefault": false,
"inDeliveryZone": true
})
.expect(200)
.end(function(err,res){
done(err);
});       
});

我有"类型错误:request.post 不是函数" 你能帮我转换为超级测试吗? 同时我仍然想使用 async/await

不确定这是否有效,但它应该是:

it('should add address supertest', async function(done) {
const res = await request
.post('/rest/v1/address/')
.set(config.headers)
//.set('Accept', 'application/json')
.set('Authorization', 'Bearer ' + auth_token)    
.send({
"name": generatedAddressName,
"city": "WARSZAWA",
"street": "UL. KASPROWICZA",
"houseNumber": "51",
"apartNumber": "",
"lat": 52.176903,
"lng": 21.028369,
"zipCode": "02-732",
"isDefault": false,
"inDeliveryZone": true
})
.expect(200)
.catch(done)   
done()
});  

https://github.com/visionmedia/supertest 中有一节谈到了承诺。

好的,关于你的错误:你需要导入你的应用程序并将其作为参数传递给请求,如下所示:

request(app).post(...

现在关于异步等待:这就是你的代码应该的样子

it('should add address supertest', async () => {
const res = await request(app)
.post('/rest/v1/address/')
.set(config.headers)
//.set('Accept', 'application/json')
.set('Authorization', 'Bearer ' + auth_token)    
.send({
"name": generatedAddressName,
"city": "WARSZAWA",
"street": "UL. KASPROWICZA",
"houseNumber": "51",
"apartNumber": "",
"lat": 52.176903,
"lng": 21.028369,
"zipCode": "02-732",
"isDefault": false,
"inDeliveryZone": true
})
expect(res.statusCode).to.equal(200);
});

编辑:在超级测试文档中注意这一点

块引用 你可以传递一个http。服务器,或 request(( 函数 - 如果服务器尚未侦听连接,则它绑定到您的临时端口,因此无需跟踪端口。

我不认为将 URL 传递给 request(( 会起作用

@iagowp 我按照您的示例编写了代码,它抛出了我

1) 0_auth
should return token for unauthorized user:
Error: incorrect header check
at Unzip.zlibOnError (zlib.js:153:15)

const chai = require('chai');
//const request = require('request-promise-native');
const mocha = require('mocha');
const config = require('../config');
const request = require('supertest');
const assert = chai.assert;
auth_token = '';
describe('0_auth', () => {
it('should return token for unauthorized user', async () => {
const res = await request(url)
.post('/rest/v1/auth/get-token')
.set(config.headers)
//.set('Accept', 'application/json')  
.send({
"deviceUuidSource": "DEVICE",
"source" : "KIOSK_KFC",
"deviceUuid" : "uniquedeviceuuid"
})
.end(function(err,res){
assert.equal(res.status,200)
assert.property(res.body, 'token')
assert.isString(res.body.token)
auth_token=res.body.token
console.log('unathorized token: '+auth_token) 
done(err);
});    
expect(res.statusCode).to.equal(200);   
});
it('should return token for authorized user', async () => {
const res = await request(url)
.post('/rest/v1/auth/with-password')
.set(config.headers)
.set('Authorization', 'Bearer ' + auth_token) 
//.set('Accept', 'application/json')  
.send({
"email" : user,
"password" : password
})
.end(function(err,res){
assert.equal(res.status,200)
assert.property(res.body,'token')
assert.isString(res.body.token)
assert.equal(res.body.user.email,user)
assert.isFalse(res.body.user.locked)
auth_token=res.body.token
console.log('authorized token: '+auth_token) 
done(err)
});  
expect(res.statusCode).to.equal(200);       
});
});

最新更新