使用数据库进行自动化测试
问题描述:
我对自动化测试还相当陌生,想知道如何去编写数据库测试。我现在正在处理的项目是运行PostgreSQL,Sequelize作为Node.JS环境中的ORM。如果它很重要,我现在也使用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',
host: 'host',
// Use "sqlite" for "test"
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变量以其他方式设置的方言和连接参数,以及 - 以上只是基于我们已经用了很多支持的代码做了一个例子。
+0
这是完美的,非常感谢你的答案! – Calvin
可以这么说,你不应该“为数据库写测试”。你应该为自己的代码编写测试。然后,该代码可能会与该数据库进行交互。当您处于测试模式时,您的代码将连接到单独的测试数据库,以便您的测试不会更改开发数据库中的数据。 –
FWIW - 编写使用序列化代码的测试时,我通常将sqlite分为我的“真实”数据库。如果这是有用的,我可以举一个摩卡咖啡的例子。 – doublesharp
感谢信息家伙! @doublesharp一个例子会非常有用,非常感谢! 所以,如果我正在阅读这个权利,我应该有一个“模拟”数据库,我运行我的函数来读取/写入/更新/删除请求并从中测试响应。有没有简单的方法将我的自动化测试指向我的“模拟”数据库? – Calvin