Newton's Preposterous Miscalculation
    Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »

    mock-knexpublic

    mock-knex

    A mock knex adapter for simulating a database during testing, especially useful when used in combination with fixture-factory.

    Knex Support

    Currently supports knex 0.8 through 0.11

    Installation

    $ npm install mock-knex --save-dev

    Usage

    for Mocking Knex

    var knex = require('knex');
    var mockDb = require('mock-knex');
    var db = knex({
        client: 'sqlite',
    });
     
    mockDb.mock(db);
     
    ... run tests ...

    for Unmocking

    ... run tests ...
     
    mockDb.unmock(db);

    for Tracking queries with knex

    ... mock knex ...
     
    var tracker = require('mock-knex').getTracker();
     
    tracker.install();
     
    tracker.on('query', function checkResult(query) {
      expect(query.method).to.equal('first');
      query.response([
        {
          fielda : 'A',
          fieldb : 'B'
        },
        {
          fielda : 'C',
          fieldb : 'D'
        },
        {
          fielda : 'E',
          fieldb : 'F'
        }
      ]);
    });
     
    knex.table('table').first('fielda', 'fieldb').then(function checkFirstArrResults(model) {
      expect(model.fielda).to.equal('A');
      expect(model.fieldb).to.equal('B');
      tracker.uninstall();
      done();
    });

    for Tracking queries with Bookshelf

    ... mock knex ...
     
    var tracker = require('mock-knex').getTracker();
     
    tracker.install();
     
    tracker.on('query', function sendResult(query) {
      query.response([
        {
          id : 1,
          foo : 'bar'
        }
      ]);
    });
     
    Model.forge({ id : 1 }).fetch()
      .then(function fetchResult(model) {
        expect(model).to.be.an.instanceof(Model);
        expect(model.get('id')).to.equal(1);
        expect(model.get('foo')).to.equal('bar');
        tracker.uninstall();
        done();
      });

    for Tracking multiple successive queries

    ... mock knex ...
    ... enable tracking ...
     
    tracker.on('query', function sendResult(query, step) {
      [
        function firstQuery() {
          expect(query.sql).to.equal(... some SQL string ...);
          query.response([{id: 1}]);
        },
        function secondQuery() {
          expect(query.sql).to.equal(... some SQL string ...);
          query.response([{id: 2}]);
        }
      ][step - 1]();
    });

    More Examples?

    Checkout the Tests

    API

    require('mock-knex')

    Method Arguments Returns Description
    mock(knex)
    knex
    initialized knex client
    - Attaches mocked client to knex instance
    unmock(knex) - Detaches mocked client from knex instance
    getTracker() - Tracker Returns query Tracker instance

    Tracker

    The tracker enables you to catch and respond to queries that occur during testing, see Test for more examples.

    Method Arguments Returns Description
    install() - - Enables query tracking mock on mocked knex client
    uninstall() - - Disables query tracking mock on mocked knex client. Also resets 'step' counter.
    on('query', callback(query, step))
    callback
    A function that gets executed on 'query' event.
    query
    Query Details object
    step
    Query execution call counter starting from 1. Increases after every 'query' event emitting. Gets resetted on calling uninstall().
    - Add event listener for 'query' event. It gets esecuted for each query that should end up in database. Instead of this callback gets executed and its up to you to assert queries and mock database responses.

    Query Details

    The object containing query details that is being sent to knex database dialect on query execution. Object properties signature matches with knex toSQL() output with additional method returns(values).

    Property / Method Arguments Returns Description
    bindings Array SQL query parameters
    method String Method name to be executed (e.g. 'select', 'update', 'delete', 'commit', 'rollback' adn etc.).
    sql String Parameterized SQL query string to be executed. Look
    options Object Unknown purpose
    transacting Boolean Whether or not the query was executed from within a transaction
    reject(Error)
    Error
    The Error, string or instance of Error, which represents why the result was rejected
    - Function that needs to be called to mock database query result for knex.
    response(values, options)
    values
    An array of mock data to be returned by database. For Bookshelf this is mostly array of objects. Knex could return any type of data.
    options
    stream
    Is this a stream response, defaults to false
    - Function that needs to be called to mock database query result for knex.

    Running Tests

    $ npm install
    $ docker-compose up -d
    $ make test-suite

    install

    npm i mock-knex

    Downloadsweekly downloads

    8,322

    version

    0.4.0

    license

    MIT

    repository

    githubgithub

    last publish

    collaborators

    • avatar