why my mongodb is connecting after the test cases are running

29 Views Asked by At

I am using mongodb with express.js when I am writing the test cases for my APIs my test cases are running before the mongodb is connected so it throws errors how to fix it

here is the error

POST /api/v1/signup √ should return 400 if no parameters are provided (41ms) √ should return 400 if firstName is missing (113ms) √ should return 400 if lastName is missing √ should return 400 if email is missing √ should return 400 if password is missing √ should return 400 if invalid first name pattern √ should return 400 if invalid last name pattern √ should return 400 if invalid email √ should return 400 if invalid password 1) should return 409 if user already exists Mongoose is connected 2) should return 200 and success message for valid signup 3) should return 500 if an error occurs on the server 4) should return 200 and success message for valid signup (additional test) Mongoose is disconnected

here is the source code of API testing

describe('POST /api/v1/signup', () => {

before(async () => {
    // Connect to MongoDB
    await mongoose.connect(process.env.MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true });
});

// Close the MongoDB connection after the tests
after(async () => {
    // Disconnect from MongoDB
    await mongoose.disconnect();
});

it('should return 400 if no parameters are provided', async () => {
    const response = await request.post('/api/v1/signup');
    expect(response.status).to.equal(400);
    expect(response.body).to.have.property('errorCode', 'REQUIRED_PARAMETER_MISSING');
    expect(response.body).to.have.property('message').that.includes('required parameters missing');
});

it('should return 400 if firstName is missing', async () => {
    const response = await request.post('/api/v1/signup').send({
        lastName: 'Doe',
        email: '[email protected]',
        password: 'password123',
    });
    expect(response.status).to.equal(400);
    expect(response.body).to.have.property('errorCode', 'REQUIRED_PARAMETER_MISSING');
    expect(response.body).to.have.property('message').that.includes('required parameters missing');
});

it('should return 400 if lastName is missing', async () => {
    const response = await request.post('/api/v1/signup').send({
        firstName: 'John',
        email: '[email protected]',
        password: 'password123',
    });
    expect(response.status).to.equal(400);
    expect(response.body).to.have.property('errorCode', 'REQUIRED_PARAMETER_MISSING');
    expect(response.body).to.have.property('message').that.includes('required parameters missing');
});

it('should return 400 if email is missing', async () => {
    const response = await request.post('/api/v1/signup').send({
        firstName: 'John',
        lastName: 'Doe',
        password: 'password123',
    });
    expect(response.status).to.equal(400);
    expect(response.body).to.have.property('errorCode', 'REQUIRED_PARAMETER_MISSING');
    expect(response.body).to.have.property('message').that.includes('required parameters missing');
});

it('should return 400 if password is missing', async () => {
    const response = await request.post('/api/v1/signup').send({
        firstName: 'John',
        lastName: 'Doe',
        email: '[email protected]',
    });
    expect(response.status).to.equal(400);
    expect(response.body).to.have.property('errorCode', 'REQUIRED_PARAMETER_MISSING');
    expect(response.body).to.have.property('message').that.includes('required parameters missing');
});

it('should return 400 if invalid first name pattern', async () => {
    const response = await request.post('/api/v1/signup').send({
        firstName: 'J', // Invalid: Contains less than two characters
        lastName: 'Doe',
        email: '[email protected]',
        password: 'password123',
    });
    expect(response.status).to.equal(400);
    expect(response.body).to.have.property('errorCode', 'INVALID_FIRST_NAME');
    expect(response.body).to.have.property('message').that.includes('invalid first name pattern');
});

it('should return 400 if invalid last name pattern', async () => {
    const response = await request.post('/api/v1/signup').send({
        firstName: 'John',
        lastName: 'is a superman of the world', // Invalid: Contains more than 15 characters
        email: '[email protected]',
        password: 'password123',
    });
    expect(response.status).to.equal(400);
    expect(response.body).to.have.property('errorCode', 'INVALID_LAST_NAME');
    expect(response.body).to.have.property('message').that.includes('invalid last name pattern');
});

it('should return 400 if invalid email', async () => {
    const response = await request.post('/api/v1/signup').send({
        firstName: 'John',
        lastName: 'Doe',
        email: 'johnexample.com', // Invalid: Missing @ symbol
        password: 'password123',
    });
    expect(response.status).to.equal(400);
    expect(response.body).to.have.property('errorCode', 'INVALID_EMAIL');
    expect(response.body).to.have.property('message').that.includes('invalid email');
});

it('should return 400 if invalid password', async () => {
    const response = await request.post('/api/v1/signup').send({
        firstName: 'John',
        lastName: 'Doe',
        email: '[email protected]',
        password: 'pass', // Invalid: Does not meet password requirements
    });
    expect(response.status).to.equal(400);
    expect(response.body).to.have.property('errorCode', 'INVALID_PASSWORD');
    expect(response.body).to.have.property('message').that.includes('password must be between');
});

it('should return 409 if user already exists', async () => {
    // Assuming you have a user with the same email in your database
    const response = await request.post('/api/v1/signup').send({
        firstName: 'John',
        lastName: 'Doe',
        email: '[email protected]',
        password: 'password123',
    });
    expect(response.status).to.equal(409);
    expect(response.body).to.have.property('errorCode', 'USER_ALREADY_EXIST');
    expect(response.body).to.have.property('message').that.includes('user already exists');
});

it('should return 200 and success message for valid signup', async () => {
    // Assuming you have a valid set of parameters for successful signup
    const response = await request.post('/api/v1/signup').send({
        firstName: 'John',
        lastName: 'Doe',
        email: '[email protected]',
        password: 'password123',
    });
    expect(response.status).to.equal(200);
    expect(response.body).to.have.property('errorCode', 'SUCCESS');
    expect(response.body).to.have.property('message').that.includes('user created successfully');
});

it('should return 500 if an error occurs on the server', async () => {
    // Force an error scenario in your server (e.g., database connection failure)
    // and check if the API returns a 500 status with an error message
    const response = await request.post('/api/v1/signup').send({
        firstName: 'John',
        lastName: 'Doe',
        email: '[email protected]',
        password: 'password123',
    });
    expect(response.status).to.equal(500);
    expect(response.body).to.have.property('errorCode', 'UNKNOWN_SERVER_ERROR');
    expect(response.body).to.have.property('message').that.includes('server error');
});

// Add more test cases for other scenarios...

it('should return 200 and success message for valid signup (additional test)', async () => {
    // Assuming you have another valid set of parameters for successful signup
    const response = await request.post('/api/v1/signup').send({
        firstName: 'Alice',
        lastName: 'Johnson',
        email: '[email protected]',
        password: 'securePassword123',
    });
    expect(response.status).to.equal(200);
    expect(response.body).to.have.property('errorCode', 'SUCCESS');
    expect(response.body).to.have.property('message').that.includes('user created successfully');
});

});

0

There are 0 best solutions below