A mock knex adapter for simulating a database during testing, especially useful when used in combination with fixture-factory.
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.
$ npm install mock-knex --save-dev
var knex = require('knex');
var mockDb = require('mock-knex');
var db = knex({
client: 'sqlite',
});
mockDb.mock(db);
... run tests ...
... run tests ...
mockDb.unmock(db);
... 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();
});
... 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();
});
... 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]();
});
Checkout the Tests
Method | Arguments | Returns | Description |
---|---|---|---|
mock(knex) | - | Attaches mocked client to knex instance | |
unmock(knex) | - | Detaches mocked client from knex instance | |
getTracker() | - | Tracker | Returns query Tracker instance |
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)) |
|
- | Add event listener for 'query' event. It gets executed 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. |
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) |
|
- | Function that needs to be called to mock database query result for knex. |
response(values, options) |
|
- | Function that needs to be called to mock database query result for knex. |
$ npm install
$ docker-compose up -d
$ make test-suite