Skip to content

thiagodp/codeceptjs-dbhelper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

80b88ea Β· Sep 17, 2021

History

26 Commits
May 16, 2021
Sep 16, 2021
May 16, 2021
May 16, 2021
May 16, 2021
May 16, 2021
Sep 17, 2021
Sep 17, 2021
Sep 17, 2021
Sep 17, 2021
Sep 17, 2021

Repository files navigation

codeceptjs-dbhelper

npm version Downloads

Let your CodeceptJS tests talk to databases

This is a Helper for CodeceptJS that allows you to execute database queries and commands using database-js.

πŸ‘‰ It works with CodeceptJS 1, 2, and 3.

Install

You have to install the library and the desired database drivers

Step 1 of 2: Install the helper

npm i -D codeceptjs-dbhelper

Step 2 of 2: Install a database driver

Driver (wrapper) Note Installation command
ActiveX Data Objects Windows only npm i -D database-js-adodb
CSV files npm i -D database-js-csv
Excel files npm i -D database-js-xlsx
Firebase npm i -D database-js-firebase
INI files npm i -D database-js-ini
JSON files npm i -D database-js-json
MySQL npm i -D database-js-mysql
MS SQL Server npm i -D database-js-mssql
PostgreSQL npm i -D database-js-postgres
SQLite npm i -D database-js-sqlite

See database-js for the full list of available drivers.

Configure

In your CodeceptJS configuration file (e.g., codecept.conf.js, codecept.json), include DbHelper in the property helpers :

  ...
  "helpers": {
    ...
    "DbHelper": {
      "require": "./node_modules/codeceptjs-dbhelper"
    }
  },
  ...

Usage

Syntax differences between CodeceptJS 2 and CodeceptJS 3

In CodeceptJS 2, every callback receives I as an argument:

Scenario('test something', async ( I ) => {   // CodeceptJS 2 notation
   /* ... */
} );

In CodeceptJS 3, every callback receives an object that contains the property I - that is, { I }:

Scenario('test something', async ( { I } ) => {   // CodeceptJS 3 notation
   /* ... */
} );

See the CodeceptJS docs for more information on how to upgrade your codebase.

Usage

The following examples are written with CodeceptJS 3.

Example 1

BeforeSuite( async( { I } ) => {
    // Connects to a database
    // The first parameter is the key that will hold a reference to the database
    I.connect( "testdb", "mysql://root:mypassword@localhost:3306/testdb" );
} );

AfterSuite( async( { I } ) => {
    // Disconnects and removes the reference to the database
    await I.removeConnection( "testdb" );
} );


Before( async( { I } ) => {

  // Deletes all the records from the table 'user'
  await I.run( "testdb", "DELETE FROM user" );

  // Inserting some users
  await I.run( "testdb", "INSERT INTO user ( username, password ) VALUES ( ?, ? )", "admin", "123456" );
  await I.run( "testdb", "INSERT INTO user ( username, password ) VALUES ( ?, ? )", "bob", "654321" );
  await I.run( "testdb", "INSERT INTO user ( username, password ) VALUES ( ?, ? )", "alice", "4lic3p4s$" );
} );


// ... your feature ...

// ... your scenarios ...

Example 2

Feature( 'Foo' );

Scenario( 'Bar', async( { I } ) => {

    // Queries a user from the database
    const results = await I.query( "testdb", "SELECT username, password FROM user WHERE username = ?", "bob" );
    const user = results[ 0 ]; // object in the first row

    I.amOnPage( '/login' );
    I.fillField( '#username', user.username ); // bob
    I.fillField( '#password', user.password ); // 654321
    I.click( '#ok' );
    I.see( 'Welcome' );
} );

API

    /**
     * Connects to the database described by the given connection string.
     *
     * @param {string|number}    key         Identification for using in other commands.
     * @param {string|object}    conn        JDBC-like connection string or a connection object accepted by `database-js`.
     * @param {object|undefined} [driver]    [OPTIONAL] Driver object, used by `database-js`.
     *
     * @returns {Connection} DatabaseJS' connection
     */
    connect(key: string | number, conn: string | object, driver?: object | undefined): any;
    /**
     * Disconnects and removes the database connection identified by the given key.
     *
     * @param {string|number} key Database identification key set in connect().
     *
     * @returns {Promise<boolean>} If it was successful.
     */
    disconnect(key: string | number): Promise<boolean>;
    /**
     * Disconnects and removes the database connection identified by the given key.
     *
     * @param {string|number} key Database identification key set in connect().
     *
     * @returns {Promise<boolean>} If it was successful.
     */
    removeConnection(key: string | number): Promise<boolean>;
    /**
     * Performs a query.
     *
     * @param {string|number}      key       Database identification key set in connect().
     * @param {string}             command   Query to run.
     * @param {...any[]|undefined} [params]  [OPTIONAL] Query parameters.
     *
     * @returns {Promise<any[]>} Query results.
     */
    query(key: string | number, command: string, ...params?: (any[] | undefined)[]): Promise<any[]>;
    /**
     * Executes a command.
     *
     * @param {string|number} key       Database identification key set in connect().
     * @param {string}        command   Command to run.
     * @param {any[]}         [params]  [OPTIONAL] Command parameters.
     *
     * @returns {Promise<any[]>} Command results.
     */
    run(key: string | number, command: string, ...params?: any[]): Promise<any[]>;
    /**
     * Creates a database connection.
     *
     * @param {string|object}       conn     JDBC-like connection string or a connection object accepted by `database-js`.
     * @param {object|undefined}    [driver] [OPTIONAL] Driver object, used by `database-js`.
     *
     * @returns {Connection} DatabaseJS' connection
     */
    createConnection(conn: string | object, driver?: object | undefined): any;
    /**
     * Checks if there is a database connection with the given key.
     *
     * @param {string|number} key Database identification key set in connect().
     *
     * @returns {boolean}
     */
    hasConnection(key: string | number): boolean;
    /**
     * Gets the database connection with the given key.
     *
     * @param {string|number} key Database identification key set in connect().
     *
     * @returns {Connection} DatabaseJS' connection.
     */
    getConnection(key: string | number): any;

See also

codeceptjs-cmdhelper - Execute commands in the console/terminal

License

MIT Β© Thiago Delgado Pinto