我已经编写了一些API,我想使用supertest编写测试用例。我有两个文件,index.js和tester.js。
index.js
import tester from './tester';
const supertest = require('supertest');
const randomString = require('randomstring');
const app = require('../../dist/server');
const request = supertest(app);
describe('User signup and login', () => {
tester(request);
it('Signup -> New user signup test', (done) => {
request.post('/users')
.send(`userName=test${randomString.generate(7)}&password=12345678&firstName=name&lastName=name`)
.set('Accept', 'application/json')
.expect('Content-Type', /json/)
.expect(201)
.end((err, res) => {
if (err) {
return done(err);
}
return done();
});
});
});
tester.js
const randomString = require('randomstring');
export default function tester(request) {
describe('testter ', () => {
it('Signup -> New user signup test', (done) => {
request.post('/users')
.send(`userName=test${randomString.generate(7)}&password=12345678&firstName=nigilan&lastName=palladium`)
.set('Accept', 'application/json')
.expect('Content-Type', /json/)
.expect(201)
.end((err, res) => {
if (err) {
return done(err);
}
return done();
});
});
});
}
现在,当我运行index.js文件时,它将运行两个测试用例。这是正确的方法吗?
答案 0 :(得分:1)
将测试嵌入功能内部
我不了解tester.js
的目的。设置有点奇怪。但是您确实编写了两次相同的测试,并且通过在tester
块内调用describe
函数,实际上是将测试放在该块内。我建议不要在此类函数中包装测试块,除非您迫切需要这样做。
超级测试的使用
我认为应该在每次测试中初始化超级测试,即不要编写
const request = supertest(app);
describe('User signup and login', () => {
it('Signup -> New user signup test', (done) => {
request.post('/users')
这样写:
describe('User signup and login', () => {
it('Signup -> New user signup test', (done) => {
const request = supertest(app);
request.post('/users')
如果您需要使用实际的代理来验证某些cookie功能,这变得至关重要。在这种情况下,代理将cookie保持在其内部状态,并且您最肯定不希望在测试之间共享该状态。
将测试标记为已完成
Mocha的done函数可以直接传递给expect
,因此无需编写:
.expect(201)
.end((err, res) => {
if (err) {
return done(err);
}
return done();
});
你可以写
.expect(201, done);
或者,supertest也可以用作promise,而mocha支持promise,因此您可以编写
it("signup ...", () => {
return request.post('/users')
...
.expect(201);
});
因此,这意味着expect
的返回值具有then
函数。该函数是否被实际调用将确定它的行为是否符合promise或处于“旧版”模式。如果您在mocha测试中返回了promise,mocha将调用then
,并使用promise行为。