Coder Social home page Coder Social logo

mock-knex's Introduction

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
$ make test-suite

mock-knex's People

Contributors

jbrumwell avatar bosgood avatar colmaengus avatar vellotis avatar icgood avatar jwdotjs avatar codisredding avatar techniq avatar lapointexavier avatar

Watchers

Dustin Martin avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.