2017-10-15 90 views
0

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

+2

可以这么说,你不应该“为数据库写测试”。你应该为自己的代码编写测试。然后,该代码可能会与该数据库进行交互。当您处于测试模式时,您的代码将连接到单独的测试数据库,以便您的测试不会更改开发数据库中的数据。 –

+0

FWIW - 编写使用序列化代码的测试时,我通常将sqlite分为我的“真实”数据库。如果这是有用的,我可以举一个摩卡咖啡的例子。 – doublesharp

+0

感谢信息家伙! @doublesharp一个例子会非常有用,非常感谢! 所以,如果我正在阅读这个权利,我应该有一个“模拟”数据库,我运行我的函数来读取/写入/更新/删除请求并从中测试响应。有没有简单的方法将我的自动化测试指向我的“模拟”数据库? – Calvin

回答

0

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

包括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

相关问题