cypress-mongo-wrapper
v1.0.0
Published
A custom npm package that provides a seamless integration between Cypress and MongoDB for testing applications
Maintainers
Readme
Cypress MongoDB Wrapper
A seamless integration between Cypress and MongoDB for end-to-end testing. This package provides easy-to-use Cypress commands for interacting with MongoDB during your tests.
Installation
npm install cypress-mongo-wrapper --save-devSetup
- Add the following to your
cypress/support/e2e.js:
require('cypress-mongo-wrapper');- Update your
cypress.config.jsto include MongoDB configuration:
const { defineConfig } = require('cypress');
const { MongoClient } = require('mongodb');
let mongoClient = null;
module.exports = defineConfig({
e2e: {
setupNodeEvents(on, config) {
on('task', {
async connectDB({ uri }) {
try {
mongoClient = new MongoClient(uri);
await mongoClient.connect();
return null;
} catch (error) {
throw new Error(`MongoDB Connection Error: ${error.message}`);
}
},
async disconnectDB() {
if (mongoClient) {
await mongoClient.close();
mongoClient = null;
}
return null;
},
async insertDocument({ dbName, collectionName, document }) {
if (!mongoClient) throw new Error('MongoDB is not connected');
const db = mongoClient.db(dbName);
const collection = db.collection(collectionName);
return await collection.insertOne(document);
},
async findDocuments({ dbName, collectionName, query }) {
if (!mongoClient) throw new Error('MongoDB is not connected');
const db = mongoClient.db(dbName);
const collection = db.collection(collectionName);
return await collection.find(query).toArray();
},
async updateDocuments({ dbName, collectionName, filter, update }) {
if (!mongoClient) throw new Error('MongoDB is not connected');
const db = mongoClient.db(dbName);
const collection = db.collection(collectionName);
return await collection.updateMany(filter, update);
},
async deleteDocuments({ dbName, collectionName, filter }) {
if (!mongoClient) throw new Error('MongoDB is not connected');
const db = mongoClient.db(dbName);
const collection = db.collection(collectionName);
return await collection.deleteMany(filter);
}
});
}
}
});- Create a
cypress.env.jsonfile with your MongoDB connection string:
{
"mongoUri": "your_mongodb_connection_string"
}Note: Add cypress.env.json to your .gitignore to keep sensitive information secure.
Usage
The package provides the following Cypress commands:
Connect to MongoDB
cy.connectToMongoDB(Cypress.env('mongoUri'));Disconnect from MongoDB
cy.disconnectFromMongoDB();Insert Document
cy.insertToMongoDB('dbName', 'collectionName', { name: 'test', value: 123 })
.then((result) => {
expect(result.insertedId).to.exist;
});Find Documents
cy.findInMongoDB('dbName', 'collectionName', { name: 'test' })
.then((docs) => {
expect(docs).to.have.length(1);
});Update Documents
cy.updateInMongoDB(
'dbName',
'collectionName',
{ name: 'test' },
{ $set: { value: 456 } }
).then((result) => {
expect(result.modifiedCount).to.equal(1);
});Delete Documents
cy.deleteInMongoDB('dbName', 'collectionName', { name: 'test' })
.then((result) => {
expect(result.deletedCount).to.equal(1);
});Example Test
describe('MongoDB Integration Test', () => {
before(() => {
cy.connectToMongoDB(Cypress.env('mongoUri'));
});
after(() => {
cy.disconnectFromMongoDB();
});
it('should perform CRUD operations', () => {
const testDoc = { name: 'test', value: 123 };
// Insert
cy.insertToMongoDB('testDB', 'testCollection', testDoc)
.then((result) => {
expect(result.insertedId).to.exist;
});
// Find
cy.findInMongoDB('testDB', 'testCollection', { name: 'test' })
.then((docs) => {
expect(docs).to.have.length(1);
expect(docs[0].value).to.equal(123);
});
// Update
cy.updateInMongoDB(
'testDB',
'testCollection',
{ name: 'test' },
{ $set: { value: 456 } }
).then((result) => {
expect(result.modifiedCount).to.equal(1);
});
// Delete
cy.deleteInMongoDB('testDB', 'testCollection', { name: 'test' })
.then((result) => {
expect(result.deletedCount).to.equal(1);
});
});
});License
MIT
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
