J'ai écrit des cas de test pour l'API de connexion en utilisant jest. Après avoir terminé les cinq tests d'une plaisanterie de test, donnez-moi l'erreur suivante dans le journal.
Tout organisme peut-il dire pourquoi il en est ainsi et comment y remédier?
CODE: (signup.test.ts)
import request from 'supertest';
import { TYPES } from '../src/inversify.types'
import { Application } from '../src/app/Application'
import { container } from '../src/inversify.config'
import dotenv from 'dotenv'
import { RESPONSE_CODE } from '../src/utils/enums/ResponseCode'
import { RESPONSE_MESSAGES } from '../src/utils/enums/ResponseMessages'
import { UserSchema } from '../src/components/user/User';
// import jwt from 'jsonwebtoken';
var application: Application
describe("POST / - SIGNUP endpoint", () => {
// var testusers: any;
//This hook is executed before running all test cases, It will make application instance, make it to listen
// on it on port 3000 and add test document in DB
beforeAll(async () => {
// Make enviroment variables available throughout the application
dotenv.config();
// Getting application instance using iversify container
application = container.get<Application>(TYPES.Application);
// Initialize frontside of application
await application.bootstrap();
// Starting Application server on given port
await application.listen(3000);
});
afterAll(
//This hook is executed after running all test cases and delete test document in database
async () =>{
const res = await UserSchema.deleteMany({ Name: { $in: [ "Test User", "Test" ] } });
// `0` if no docs matched the filter, number of docs deleted otherwise
console.log('---------------------->>>>>>>>>>>>>>>>>>>', (res as any).deletedCount);
}
)
it("Signup for user that don\'t exists", async () => {
const response = await request(application.getServer()).post('/user/signup')
.send({
"Email": JSON.parse(process.env.TEST_USER).Email,
"Name": "Test User",
"Password": process.env.TEST_ACCOUNTS_PASSWORD
})
expect(response.status).toBe(RESPONSE_CODE.CREATED);
expect(JSON.parse(response.text)).toEqual(expect.objectContaining({
Message: RESPONSE_MESSAGES.ADDED_SUCESSFULLY,
Data: expect.objectContaining({
Name: 'Test User',
Country: '',
PhoneNumber: '',
// Password: '$2b$10$nIHLW/SA73XLHoIcND27iuODFAArOvpch6FL/eikKT78qbShAl6ry',
Dob: '',
Role: 'MEMBER',
IsEmailVerified: false,
IsBlocked: 'ACTIVE',
IsTokenSent: false,
twoFAStatus: false,
// _id: '5c812e2715e0711b98260fee',
Email: JSON.parse(process.env.TEST_USER).Email
})
})
);
console.log('*** Signup for user that don\'t exists *** response', response.text, 'response status', response.status);
});
it("Signup for user that exists", async () => {
const response = await request(application.getServer()).post('/user/signup')
.send({
"Email": JSON.parse(process.env.TEST_USER).Email,
"Name": "Test User",
"Password": process.env.TEST_ACCOUNTS_PASSWORD
})
expect(response.status).toBe(RESPONSE_CODE.CONFLICT);
expect(JSON.parse(response.text)).toEqual({
Message: RESPONSE_MESSAGES.ALREADY_EXISTS
})
console.log('*** Signup for user that don\'t exists *** response', response.text, 'response status', response.status);
});
});
Jest n'est pas sorti une seconde après la fin du test.
Cela signifie généralement qu'il existe des opérations asynchrones qui n'ont pas été arrêtées dans vos tests. Envisagez d'exécuter Jest avec
--detectOpenHandles
pour résoudre ce problème.Impossible de se connecter une fois les tests terminés. Avez-vous oublié d'attendre quelque chose d'async dans votre test?
Attempted to log "{ accepted: [ '[email protected]' ],
rejected: [],
envelopeTime: 621,
messageTime: 867,
messageSize: 906,
response: '250 2.0.0 OK 1551945300 f6sm5442066wrt.87 - gsmtp',
envelope:
{ from: '[email protected]',
to: [ '[email protected]' ] },
messageId: '<[email protected]>' }".
at CustomConsole.log (node_modules/jest-util/build/CustomConsole.js:156:10)
at src/email/MailHandler.ts:2599:17
at transporter.send.args (node_modules/nodemailer/lib/mailer/index.js:226:21)
at connection.send (node_modules/nodemailer/lib/smtp-transport/index.js:247:32)
at callback (node_modules/nodemailer/lib/smtp-connection/index.js:435:13)
at stream._createSendStream (node_modules/nodemailer/lib/smtp-connection/index.js:458:24)
at SMTPConnection._actionSMTPStream (node_modules/nodemailer/lib/smtp-connection/index.js:1481:20)
at SMTPConnection._responseActions.Push.str (node_modules/nodemailer/lib/smtp-connection/index.js:968:22)
at SMTPConnection._processResponse (node_modules/nodemailer/lib/smtp-connection/index.js:764:20)
at SMTPConnection._onData (node_modules/nodemailer/lib/smtp-connection/index.js:570:14)
J'utilisais le scénario de test réactif natif (voir ci-dessous) lorsque Cannot log after tests are done
arrivé.
it('renders correctly', () => {
renderer.create(<App />);
});
Apparemment, le problème était que le test se terminait mais la journalisation était toujours nécessaire. J'ai donc essayé de faire le rappel dans le cas de test asynchrone, en espérant que le test ne se terminera pas immédiatement:
it('renders correctly', async () => {
renderer.create(<App />);
});
Et ça a marché. Cependant, j'ai très peu d'indice sur le fonctionnement interne.
Si vous utilisez le type asynchrone/attendent dans votre code, cette erreur peut se produire lorsque vous appelez la fonction async
sans le mot clé await
.
Dans mon cas, j'ai défini une fonction comme celle-ci ci-dessous,
async getStatistics(headers) {
....
....
return response;
}
Mais j'ai appelé cette méthode comme getStatistics(headers)
au lieu de await getStatistics(headers)
.
Lorsque j'ai inclus await
, cela a bien fonctionné et le problème a été résolu.