我只是想偽造池連接,并在我的所有單元測驗中使用連接。 在我所有的單元測驗中使用該連接。
const logger = require(' ./logger.js' );
const { Pool } = require ('pg') 。
const proxyquire = require('proxyquire')。
const sinon = require('sinon')。
var assert = sinon.assert;
const pool = new Pool({
connectionString: process.env.HEROKU_POSTGRESQL_BLUE_URL,
ssl: {
rejectUnauthorized: false//max: 500 async function queryWithParameter(queryToExecute,parameterReq) {
var result;
var finalResult;
try{
const client = await pool.connect()。
try{
if(parameterReq == null)
result = await client.query(queryToExecute)。
else
result = await client.query(queryToExecute, parameterReq)。
finalResult = result.rows。
}
catch(err){
logger.error('error in queryWithParameter : ' err)。
}
finally{
client.release(true)。
}
}
catch (err){
}
return finalResult。
}
module.exports = {
queryWithParameter
};
我應該使用sinon.js來偽造池子的連接,這樣我就不能打到實際的DB,但未能成功實施。
uj5u.com熱心網友回復:
我將告訴你如何測驗 "應該是正確的查詢結果 "的測驗用例。
index.js:
const { Pool } = require('pg') 。
const pool = new Pool( {
connectionString: process.env.HEROKU_POSTGRESQL_BLUE_URL,
ssl: {
rejectUnauthorized: false,
},
});
async function queryWithParameter(queryToExecute, parameterReq) {
var result;
var finalResult;
try {
const client = await pool.connect()。
try {
if (parameterReq == null) result = await client.query(queryToExecute)。
else result = await client.query(queryToExecute, parameterReq)。
finalResult = result.rows。
} catch (err) {
console.error('error in queryWithParameter : '/span> err)。
} finally {
client.release(true)。
}
} catch (err) {}.
return finalResult。
}
module.exports = { queryWithParameter };
index.test.js:
const sinon = require('sinon')。
const proxyquire = require('proxyquire')。
describe('69222273', () => {
it('should query result', async ( ) => {
process.env.HEROKU_POSTGRESQL_BLUE_URL = '不管'。
const res = { rows: [{ message: 'Hello world!' }] 。};
const clientStub = { query: sinon.stub() 。 resolves(res), release: sinon.stub() };
const poolStub = { connect: sinon.stub().resolves(clientStub) };
const pgStub = { Pool: sinon.stub().returns(poolStub) };
const { queryWithParameter } = proxyquire(' ./', {
pg: pgStub,
});
const actual = await queryWithParameter('SELECT 1::text as message', ['Hello world! '])。
sinon.assert.calledWithExactly(pgStub.Pool, {
connectionString: 'ever',
ssl: {
rejectUnauthorized: false,
},
});
sinon.assert.calledOnce(poolStub.connect)。
sinon.assert.calledWithExactly(clientStub. query, 'SELECT $1::text as message', ['Hello world!'])。)
sinon.assert.match( actual, [{ message: 'Hello world!' }])。)
sinon.assert.calledWithExactly(clientStub.release, true) 。
});
});
測驗結果:
69222273
?應查詢結果(1350ms
1 通過 (1s)
----------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
----------|---------|----------|---------|---------|-------------------
All files | 84.62 | 50 | 100 | 91.67 |
index.js | 84. 62 | 50 | 100 | 91.67 | 22 !
----------|---------|----------|---------|---------|-------------------
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/328073.html
標籤:
