node.js - 使用数据库进行自动化测试

标签 node.js postgresql testing sequelize.js jestjs

我对自动化测试相当陌生,想知道我应该如何为数据库编写测试。我现在正在处理的项目是在 Node.JS 环境中运行带有 Sequelize 作为 ORM 的 PostgreSQL。如果重要的话,我现在还使用 Jest 作为测试库。

最佳答案

在我的应用程序中,我使用 config 模块来控制不同环境的配置设置。运行测试时,process.env.APP_ENV 设置为 test,它会将 dialect 设置为 sqlite .请注意,您将没有任何数据或数据持久性,因此您需要使用测试所需的所有数据填充它。

包含sqlite3

yarn add -D sqlite3

npm i -D sqlite3

配置

module.exports = {
  database: {
    name: 'dbname',
    user: 'user',
    password: 'password',
    host: 'host',
    // Use "sqlite" for "test", the connection settings above are ignored
    dialect: process.env.APP_ENV === 'test' ? 'sqlite' : 'mysql',
  },
};

数据库/Sequelize

// get our config
  const config = require('../config');
  
  // ... code

  const instance = new Sequelize(
      config.database.name,
      config.database.user,
      config.database.password,
      {
        host: config.database.host,
        // set the dialect, will be "sqlite" for "test"
        dialect: config.database.dialect,
      }
  );

测试类(摩卡)

const TestUtils = require('./lib/test-utils');
    
describe('Some Tests', () => {
  let app = null;

  // run before the tests start
  before((done) => {
    // Mock up our services
    TestUtils.mock();

    // these are instantiated after the mocking
    app = require('../server');

    // Populate redis data
    TestUtils.populateRedis(() => {
      // Populate db data
      TestUtils.syncAndPopulateDatabase('test-data', () => {
        done();
      });
    });
  });

  // run code after tests have completed
  after(() => {
    TestUtils.unMock();
  });

  describe('/my/route', () => {
    it('should do something', (done) => {
      return done();
    });
  });
});

运行测试

APP_ENV=test ./node_modules/.bin/mocha

您也可以通过其他方式使用 ENV 变量来设置方言和连接参数 - 以上只是基于我们使用大量支持代码完成的示例。

关于node.js - 使用数据库进行自动化测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46759668/

相关文章:

python - 使用pygresql(pg模块)执行SQL select in语句

c# - 如何并行运行 NUnit(Selenium Grid)测试?

android - 如何使用 Espresso 2.0 测试配置更改

node.js - 为什么我不能在nodejs模块中创建闭包

javascript - 异步/等待 for 循环 | await 只在 async 函数中有效

javascript - graphqlj-js 联合类型,访问参数

postgresql - 如何连接到 Google Cloud SQL PostgresQL

node.js - 无法读取 expressjs 中未定义的属性 'create'

sql - Postgres 计算 GROUP BY 中的唯一结果

javascript - Istanbul 尔封面测试挂起,然后在 60 秒后中止