@luminati-io/mock-knex
v0.4.12-lum.2
Published
a knex mock adapter for simulating a db during testing
Downloads
55
Readme
mock-knex
A mock knex adapter for simulating a database during testing, especially useful when used in combination with fixture-factory.
Knex Support
Currently tested on knex 0.8 through 2.0, should operate on any version of knex but may have issues with untested releases. Please file an issue if you come across any issues.
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')
Tracker
The tracker enables you to catch and respond to queries that occur during testing, see Test for more examples.
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).
Running Tests
$ npm install
$ docker-compose up -d
$ make test-suite