以下のコードで、エクスポートされたメソッドを単体テストする必要があります。返されたPromiseの拒否/解決を制御するプライベートメソッドの値を嘲笑したい。 client
はすでにデータベースに接続されているオブジェクトnode-postgresです。単体テストで、リクエスト、パイプ、ストリームをモックで使用するプライベートメソッド
は、私は必要なライブラリをスタブにしproxyquireを使用することができます知っているが、どのように私は、連鎖方法.on('error', ...)
、.pipe(stream)
と.on('end', ...)
私が返された値を制御することができるように模擬することができます。
注記示されたエクスポートされたメソッドは、実際のものを単純化したものであり、importDomainのエクスポートは実行できません。
const copyFrom = require('pg-copy-streams').from
const request = require('request')
const Promise = require('bluebird')
// private
function importDomain (client, domain) {
return new Promise((resolve, reject) => {
let stream = client.query(copyFrom(`COPY ${domain.table} FROM STDIN;`))
let req = request(`${domain.url}`)
req.on('error', reject)
req.pipe(stream)
.on('error', reject)
.on('end', resolve)
})
}
// public
module.exports = (client) => {
let domain = someFunctionReturningDomain()
importDomain(client, domain)
}
.on()はどのようにテストされていますか?私は、これをどのように行うことができるかを示すいくつかのコードサンプルを見たいと思います。 – Brian
リクエストを模擬するときは、書き込み可能なストリームとして実装し、テスト中にデータを書き込みます。 http://stackoverflow.com/questions/33141012/how-to-mock-streams-in-nodejsを参照してください。 –