Тесты встраивания в функции
Я не понимаю цели 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')
Это становится критически важным, если вам необходимо проверить некоторые функции cook ie с использованием фактического агента. В этом случае агент переносит файлы cookie во внутреннем состоянии, и вы, безусловно, не хотите, чтобы это состояние распределялось между тестами.
Пометка теста как завершенного
Функция готовности Мокко может быть передана непосредственно в expect
, поэтому вместо записи:
.expect(201)
.end((err, res) => {
if (err) {
return done(err);
}
return done();
});
Вы можете просто написать
.expect(201, done);
В качестве альтернативы, супертест может также использоваться как обещание, а mocha поддерживает обещания, так что вы можете написать
it("signup ...", () => {
return request.post('/users')
...
.expect(201);
});
Так что это означает, что возвращаемое значение expect
имеет функцию then
. Будет ли функция вызываться на самом деле, будет определять, будет ли она вести себя как обещание или в «устаревшем» режиме. Если вы вернете обещание в тесте mocha, mocha позвонит then
и будет использовано поведение обещания.