An abstraction layer for the mysql package to facilitate handling database fixtures for testing purposes, in a MySQL database. This package is ment to be used in conjunction with the dbfixtures package, but can also be used by itself.
npm install --save-dev dbfixtures-mysql-driver
-
Package version
>=1.1.*
supports NodeJSv8
or higher.
NOTE: For versions8
and9
the node flag--harmony_promise_finally
is required -
Package version
1.0.*
supports NodeJSv7
or higher.
This package exposes the create(connectionOptions: string | ConnectionConfig): Promise<IDriver>
function that returns a Promise that resolves with an instance of the driver.
Note: For detailed information about the connectionOptions
argument, please consult these connection options.
An instance of the driver exposes the following interface
// truncates the tables with the supplied names, ignoring foreign key constraints
truncate: (tableNames: string[]) => Promise<void>
// inserts the supplied rows into the specified table, respecting foreign key constraints
insertFixtures: (tableName: string, fixtures: [{}]) => Promise<void>
// terminates the connection to the database
close: () => Promise<void>
This example uses Mocha as the potential test runner.
const dbfixtures = require('dbfixtures');
const fixturesMysqlDriver = require('dbfixtures-mysql-driver');
const mysqlConnectionInfo = {
host: 'localhost',
port: '3306',
user: 'root',
password: '',
database: 'fixtures_test',
};
const fixtures = {
'roles': [
{ id: 1, name: 'role 1' },
{ id: 2, name: 'role 2' },
],
'users': [
{ id: 1, email: 'myemail@test.net', role_id: 2 },
{ id: 2, email: 'test@gmail.com', role_id: 1 },
{ id: 3, email: 'another@email.org', role_id: 1 },
],
};
describe('fixtures example', function () {
before(async function () {
const mysqlDriver = await fixturesMysqlDriver.create(mysqlConnectionInfo);
dbfixtures.setDrivers(mysqlDriver);
});
after(async function () {
await dbfixtures.closeDrivers();
});
beforeEach(async function () {
await dbfixtures.insertFixtures(fixtures);
});
it('should have the database seeded with the fixtures', function () {
// ...
});
});
-
cd
into the package's directory -
run
npm install
-
for unit tests run
npm test -- test\unit\
-
for integration tests run
npm test -- test\integration\
NOTE: requires an active MySQL server available throughlocalhost:3306
and with the expected setup (see below) -
for end-to-end tests run
npm test -- test\e2e\
NOTE: requires an active MySQL server available throughlocalhost:3306
and with the expected setup (see below)
The integration
and end-to-end
tests the database server needs to have an initial setup that creates the database and tables used in the tests.
A shell script is provided in the test/db_setup/
directory with the commands that need to be executed in the database server to correctly set it up for the tests.
If you are using Docker
, you can run the CLI command docker run --name testmysql -p 127.0.0.1:3306:3306/tcp -e MYSQL_DATABASE=fixtures_test -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -v absolute-path-to-project/test/db_setup/:/docker-entrypoint-initdb.d/ -d mariadb:10
to raise a container with the MariaDB v10.* image and make it available through localhost:3306
.
NOTE: Replace absolute-path-to-project
with the absolute path to the root of the repository clone in your machine.