2.1.0 • Published 4 months ago

@nestjs-cucumber-kit/mongodb v2.1.0

Weekly downloads
-
License
MIT
Repository
-
Last release
4 months ago

@nestjs-cucumber-kit/mongodb

The @nestjs-cucumber-kit/mongodb is a MongoDB plugin for the NestJS Cucumber Kit. It replaces the standard MongoDB connection with an in-memory MongoDB server, facilitating easier and more efficient testing.

Installation

Install the package using either npm or Yarn:

Using npm:

npm install @nestjs-cucumber-kit/mongodb --save-dev

Using Yarn:

yarn add @nestjs-cucumber-kit/mongodb --dev

Configuration

To configure, add the following provider to your config.js:

config.js

import { INestApplication, ValidationPipe } from '@nestjs/common';
import * as path from 'path';
import { FixtureSteps, HttpSteps, StorageSteps, ICucumberKitConfig } from '@nestjs-cucumber-kit/core';
import { MongoDBProvider, MongoDBSteps } from '@nestjs-cucumber-kit/mongodb';

export const config: ICucumberKitConfig = {
  steps: [HttpSteps, StorageSteps, FixtureSteps, MongoDBSteps],
  providers: [MongoDBProvider],
  dataDir: path.join(__dirname, '..', 'data'),
  appConfigure: (app: INestApplication) => {
    app.useGlobalPipes(new ValidationPipe());
  },
};

Setting Up Test Data with Fixtures

You can add fixtures to set up your test data. Here's an example:

data/fixture/item.fixture.ts

import { Model } from 'mongoose';
import { getModelToken } from '@nestjs/mongoose';
import { BaseFixture } from '@nestjs-cucumber-kit/core';
import { Item, ItemDocument } from '../../app/item';

export default class ItemFixture extends BaseFixture {
  async apply(): Promise<void> {
    const itemModel: Model<ItemDocument> = this.app.get(getModelToken(Item.name));
    const items = [
      { _id: '1', name: 'test' },
      { _id: '2', name: 'test' },
    ];

    await itemModel.insertMany(items);
  }
}

Usage Examples

Below are some scenarios illustrating how to use the plugin:

Feature: MongoDB

Feature: MongoDB

  Background: Load data
    Given I load fixture from the file "fixture/item.fixture"

  Scenario: Find a single item and store the result
    Given I store the key "itemName" with the value "test"
    When I findOne in model "Item" with JSON and store in "item":
      """
      { "name": "{{itemName}}" }
      """
    Then the key "item" should contain JSON:
      """
      { "_id": "1", "name": "{{itemName}}" }
      """

  Scenario: Assert exact match for a single item
    When I findOne in model "Item" with JSON:
      """
      { "name": "test" }
      """
    And the result should contain JSON:
      """
      { "_id": "1", "name": "test" }
      """

  Scenario: Find multiple items and store the results
    When I find in model "Item" with JSON and store in "items":
      """
      { "name": "test" }
      """
    Then the key "items" should contain JSON:
      """
      [{ "_id": "1", "name": "test" }, { "_id": "2", "name": "test" }]
      """

  Scenario: Assert truthy & falsy
    When I find in model "Item" with JSON and store in "items":
      """
      { "name": "test" }
      """
    Then the key "items" should be truthy
    And I findOne in model "Item" with JSON and store in "item":
      """
      { "name": "test12344" }
      """
    Then the key "item" should be falsy

Complete MongoDB example.

2.1.0

4 months ago

2.0.1

4 months ago

2.0.0

4 months ago

1.0.0

4 months ago