2017-10-15 86 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

相關問題