{"id":24967263,"url":"https://github.com/anvk/easy-sql-tests","last_synced_at":"2026-04-09T07:32:42.115Z","repository":{"id":35521137,"uuid":"39791696","full_name":"anvk/easy-sql-tests","owner":"anvk","description":"Micro framework to execute tests for T-SQL logic in Node.js","archived":false,"fork":false,"pushed_at":"2015-08-04T17:44:34.000Z","size":218,"stargazers_count":2,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-03T12:48:58.664Z","etag":null,"topics":["chai","easy-to-use","mocha","mssql","nodejs","testing"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/anvk.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-07-27T18:45:39.000Z","updated_at":"2017-03-16T08:03:26.000Z","dependencies_parsed_at":"2022-08-29T02:11:38.265Z","dependency_job_id":null,"html_url":"https://github.com/anvk/easy-sql-tests","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anvk%2Feasy-sql-tests","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anvk%2Feasy-sql-tests/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anvk%2Feasy-sql-tests/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anvk%2Feasy-sql-tests/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anvk","download_url":"https://codeload.github.com/anvk/easy-sql-tests/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246131244,"owners_count":20728299,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chai","easy-to-use","mocha","mssql","nodejs","testing"],"created_at":"2025-02-03T12:39:34.796Z","updated_at":"2025-12-30T23:19:29.714Z","avatar_url":"https://github.com/anvk.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"﻿# easy-sql-tests [![Build Status](https://travis-ci.org/anvk/easy-sql-tests.svg?branch=master)](https://travis-ci.org/anvk/easy-sql-tests)\n\n\u003e Micro framework to execute tests for T-SQL logic in Node.js\n\n## Install\n\n```\n$ npm install easy-sql-tests --save-dev\n```\n\n\n## API\n\n#### EasySQLTests(dbConfig [,options])\n\n\u003e constructor to initialize easy sql tests module\n\n\u003e `dbConfig` - mssql module database configuration  \n\u003e `dbConfig.user`  \n\u003e `dbConfig.password`  \n\u003e `dbConfig.server`  \n\u003e `dbConfig.database`   \n\u003e `options` - extra options for the module   \n\u003e `options.cleanupQuery` - (optional) query to be executed for cleanup() function  \n\u003e `options.errorCallback` - (optional) function callback to be executed if one of the prepQueries will fail to execute  \n\n#### connectionOpen(callback)\n\n\u003e function to open connection to the DB.\n\n#### connectionClose()\n\n\u003e function to close connection to the DB.\n\n#### cleanup(callback)\n\n\u003e function to execute cleanup query if it was passed into constructor\n\n#### compileTest(testSteps, doneCallback)\n\n\u003e function to execute test steps  \n\n\u003e `testSteps` - array of testStep objects  \n\u003e `testStep.storProcName` - stored procedure name to be executed  \n\u003e `testStep.args` - object containing arguments for stored procedure  \n\u003e `testStep.query` - string containing query to be executed  \n\u003e `testStep.assertionCallback` - callback after query/storProc is executed. Callback have 2 arguments: `error` and `recordsets` which contains an array of arrays (array of tables). Put your assertions inside.   \n\u003e `testStep.queries` - array of strings representing queries to be executed  \n\n#### connection\n\n\u003e property which contains MSSQL connection\n\n#### dbConfig\n\n\u003e property which contains DB Configuration\n\n\n## Usage\n\n\n### Create instance of easySQLTests\n\nIn order to create an instance of the module to use in your test follow this simple example:\n\n```javascript\nvar EasySQLTests = require('easy-sql-tests');\n\n// ...\n\ndescribe('my test suite', function() {\n  var easySQLTests;\n\n  var dbConfig = {\n    user: \"USERNAME\",\n    password: \"PASSWORD\",\n    server: \"MY_SERVER\",\n    database: \"DB\"\n  };\n\n  // ...\n\n  // runs before all the tests\n  before(function(done) {\n    easySQLTests = new EasySQLTest(dbConfig);\n  });\n\n  // ...\n\n});\n```\n\n\n### Open and Close connection\n\nMost of the times you will need to open connection once and close by the end of your tests.\n\n```javascript\nvar EasySQLTests = require('easy-sql-tests');\n\n// ...\n\ndescribe('my test suite', function() {\n  var easySQLTests;\n\n  var dbConfig = {\n    user: \"USERNAME\",\n    password: \"PASSWORD\",\n    server: \"MY_SERVER\",\n    database: \"DB\"\n  };\n\n  // ...\n\n  // runs before all the tests\n  before(function(done) {\n    easySQLTests = new EasySQLTest(dbConfig);\n\n    easySQLTests.connectionOpen(function(error) {\n      if (error) {\n        console.log(error);\n      }\n\n      done();\n    });\n  });\n\n  // ...\n\n  // runs after all the tests\n  after(function() {\n    easySQLTests.connectionClose();\n  });\n\n  // ...\n\n});\n```\n\n\n### Setup cleanup for the test suite\n\nTo ensure proper testing you might want to cleanup all temporarily generated data by your tests.  \nYou can easily achieve that by defining a `cleanupQuery` and calling `cleanup()` function.\n\n```javascript\ndescribe('my test suite', function() {\n  var easySQLTests;\n\n  // ...\n\n  // runs before all the tests\n  before(function(done) {\n    easySQLTests = new EasySQLTest(dbConfig, {\n      cleanupQuery: 'EXEC [test].[CLEANUP_LOGIC]'\n    });\n\n    easySQLTests.connectionOpen(function(error) {\n      if (error) {\n        console.log(error);\n        return done();\n      }\n\n      // cleanup before running tests\n      easySQLTest.cleanup(function(error) {\n        if (error) {\n          errorCallback(error);\n        }\n\n        done();\n      });\n    });\n  });\n\n  // ...\n\n  // runs after every test case\n  afterEach(function(done) {\n    cleanup(done);\n  });\n\n  // ...\n\n});\n```\n\n\n### Run basic query test\n\n```javascript\nit('My query test', function(done) {\n  var assertionCallback = function(error, recordsets) {\n    if (error) {\n      return console.log(error);\n    }\n\n    // we returned back at least 1 table back\n    expect(recordsets.length).to.equal(1);\n  };\n\n  var testSteps = [\n    {\n      query: 'SELECT * FROM [MY_TABLE]',\n      assertionCallback: assertionCallback\n    }\n  ];\n\n  easySQLTests.compileTest(testSteps, done);\n});\n```\n\n\n### Run basic stor proc test\n\n```javascript\nit('My stor proc test', function(done) {\n  var assertionCallback = function(error, recordsets) {\n    if (error) {\n      return console.log(error);\n    }\n\n    // we returned back at least 1 table back\n    expect(recordsets.length).to.equal(1);\n  };\n\n  var testSteps = [\n    {\n      storProcName: '[sp].[STOR_PROC]',\n      args: {\n        intArg: 1,\n        strArg: 'string'\n      },\n      assertionCallback: assertionCallback\n    }\n  ];\n\n  easySQLTests.compileTest(testSteps, done);\n});\n```\n\n\n### Run multiple steps in the same test\n\nIf you need to run multiple steps to check that logic is correct then you can define multiple `testSteps` with their assertion callbacks.\n\n```javascript\nit('Multiple steps inside the test', function(done) {\n  var assertionCallback = function(error, recordsets) {\n    if (error) {\n      return console.log(error);\n    }\n\n    // assertions here\n  };\n\n  var assertionCallback2 = function(error, recordsets) {\n    if (error) {\n      return console.log(error);\n    }\n\n    // assertions here\n  };\n\n  var testSteps = [\n    {\n      storProcName: '[sp].[STOR_PROC]',\n      args: {\n        intArg: 1,\n        strArg: 'string'\n      },\n      assertionCallback: assertionCallback\n    },\n    {\n      query: 'SELECT * FROM [MY_TABLE]',\n      assertionCallback: assertionCallback2\n    },\n    {\n      storProcName: '[sp].[STOR_PROC2]',\n      args: {},\n      assertionCallback: assertionCallback2\n    },\n  ];\n\n  easySQLTests.compileTest(testSteps, done);\n});\n```\n\n\n### Run multiple queries to pre-setup data before executing your test\n\nSome of the tests require initial setup of the data or state in your testing database.\n\n```javascript\nit('Prep queries before test', function(done) {\n  var assertionCallback = function(error, recordsets) {\n    // ...\n  };\n\n  var testSteps = [\n    {\n      queries: [\n        \"INSERT INTO [MY_TABLE] ([intVal],[strVal]) VALUES (1,'A');\",\n        \"INSERT INTO [MY_TABLE] ([intVal],[strVal]) VALUES (2,'B');\"\n      ]\n    },\n    {\n      storProcName: '[sp].[STOR_PROC]',\n      args: {},\n      assertionCallback: assertionCallback\n    },\n    // {\n    //    another test step\n    // },\n    // {\n    //    ...\n  ];\n\n  easySQLTests.compileTest(testSteps, done);\n});\n```\n\n\n### Setting up a fail callback when prep queries fail\n\nYou might want to capture and execute special logic in case one of the prep queries will fail.  \nIn order to do so `errorCallback` is executed whenever one of those queries fails.\n\n```javascript\ndescribe('my test suite', function() {\n  var easySQLTests;\n\n  var errorCallback = function(error) {\n    console.error(error);\n\n    // DO SOME EXTRA LOGIC HERE\n  };\n\n  // ...\n\n  // runs before all the tests\n  before(function(done) {\n    easySQLTests = new EasySQLTest(dbConfig, {\n      errorCallback: errorCallback\n    });\n  });\n\n  // ...\n\n});\n```\n\n\n## Full Example\n\nA full blown example with open/close connection, cleanup query after each test will look the following:\n\n```javascript\nvar chai = require('chai'),\n    expect = chai.expect,\n    EasySQLTests = require('easy-sql-tests'));\n\ndescribe('my test suite', function() {\n\n  var easySQLTests;\n\n  var dbConfig = {\n    user: \"USERNAME\",\n    password: \"PASSWORD\",\n    server: \"MY_SERVER\",\n    database: \"DB\"\n  };\n\n  var errorCallback = function(error) {\n    console.error(error);\n  };\n\n  var cleanup = function(done) {\n    easySQLTests.cleanup(function(error) {\n      if (error) {\n        errorCallback(error);\n      }\n\n      done();\n    });\n  };\n\n  // runs before all the tests\n  before(function(done) {\n    easySQLTests = new EasySQLTests(dbConfig, {\n      cleanupQuery: 'EXEC [test].[CLEANUP_LOGIC]',\n      errorCallback: errorCallback\n    });\n\n    easySQLTests.connectionOpen(function(error) {\n      if (error) {\n        errorCallback(error);\n        return done();\n      }\n\n      cleanup(done);\n    });\n  });\n\n  // runs after all tests in this block\n  after(function() {\n    easySQLTests.connectionClose();\n  });\n\n  // runs after every test case\n  afterEach(function(done) {\n    cleanup(done);\n  });\n\n  it('test #1 maybe basic select test', function(done) {\n\n    var assertionCallback = function(error, recordsets) {\n      if (error) {\n        return console.error(error);\n      }\n\n      // we returned back at least 1 table back\n      expect(recordsets.length).to.not.equal(0);\n    };\n\n    var testSteps = [\n      {\n        storProcName: '[sp].[STOR_PROC_SELECT]',\n        args: {\n          intArg: 1\n        },\n        assertionCallback: assertionCallback\n      }\n    ];\n\n    easySQLTests.compileTest(testSteps, done);\n  });\n\n  it('test #2 maybe insert test', function(done) {\n\n    var assertionCallback = function(error, recordsets) {\n      if (error) {\n        return console.error(error);\n      }\n\n      // we returned back at least 1 table back\n      expect(recordsets.length).to.not.equal(0);\n    };\n\n    var assertionCallback2 = function(error, recordsets) {\n      if (error) {\n        return console.error(error);\n      }\n\n      // we returned back at least 1 table back\n      expect(recordsets.length).to.not.equal(0);\n      // we have at least one row\n      expect(recordsets[0]).to.not.equal(0);\n    };\n\n    var testSteps = [\n      {\n        queries: [\n          \"INSERT INTO [MY_TABLE] ([intVal],[strVal]) VALUES (1,'A');\",\n          \"INSERT INTO [MY_TABLE] ([intVal],[strVal]) VALUES (2,'B');\"\n        ]\n      },\n      {\n        storProcName: '[sp].[STOR_PROC_INSERT]',\n        args: {\n          intArg: 1,\n          strArg: 'string'\n        },\n        assertionCallback: assertionCallback\n      },\n      {\n        query: 'SELECT * FROM [MY_TABLE]',\n        assertionCallback: assertionCallback2\n      }\n    ];\n\n    easySQLTests.compileTest(testSteps, done);\n  });\n\n  // ...\n\n});\n```\n\n\n## License\n\nMIT license; see [LICENSE](./LICENSE).\n\n(c) 2015 by Alexey Novak and Abdul Khan\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanvk%2Feasy-sql-tests","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanvk%2Feasy-sql-tests","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanvk%2Feasy-sql-tests/lists"}