Headless Chrome(以下HC)を使ったPDFサーバーのテストを書いた。
github.com
HCが別プロセスのため非同期処理などではまり面倒だったため、外からHTTPリクエストを投げるテストにした。結合テスト?
だいぶ雑だけど今まで手でたたいていたのに比べれば効率化できたともう。
GitHub - visionmedia/supertest: Super-agent driven library for testing node.js HTTP servers using a fluent API
supertestとmochaを使う。
npm install mocha supertest
package.json
//省略
"dependencies": {
"body-parser": "^1.18.3",
"connect-timeout": "^1.9.0",
"debug": "^3.1.0",
"express": "^4.16.3",
"mocha": "^5.2.0",
"morgan": "^1.9.0",
"npm": "^6.4.0",
"puppeteer": "^1.7.0",
"supertest": "^3.1.0"
},
//省略
supertestをrequireした関数request にexpressのappを渡してもいいけど、URLを渡せばリクエストを投げて、ステータスコードとか各種ヘッダーなどのレスポンスをexpectできる。
test/requests.js
const request = require('supertest')
const SERVER_URL = process.env.HCEP_TEST_SERVER_URL || 'http://localhost:8000'
const TAREGT_URL = process.env.HCEP_TEST_TAREGT_URL ||'https://www.google.com'
const HTML_TEST_STRINGS = '<html>ok</html>'
console.log('SERVER_URL:', SERVER_URL)
console.log('TAREGT_URL:', TAREGT_URL)
describe('requests routes', (done) => {
req = request(SERVER_URL);
it('Health Check GET /hc', async () => {
await req.get('/hc')
.expect(200, 'ok', done)
})
it('GET / with no url', async () => {
await req.get('/')
.expect(400, 'get parameter "url" is not set', done)
})
it('GET / with url ' + TAREGT_URL, async () => {
await req.get('/?url=' + TAREGT_URL)
.expect('Content-Type', 'application/pdf')
.expect(200, done)
})
it('POST / html=' + HTML_TEST_STRINGS, async () => {
await req.post('/')
.send('html=' + encodeURI(HTML_TEST_STRINGS))
.expect('Content-Type', 'application/pdf')
.expect(200, done)
})
it('GET /screenshot with url ' + TAREGT_URL, async () => {
await req.get('/screenshot?url=' + TAREGT_URL)
.expect('Content-Type', 'image/png')
.expect(200, done)
})
it('POST /screenshot html='+ HTML_TEST_STRINGS, async () => {
await req.post('/screenshot')
.send('html=' + encodeURI(HTML_TEST_STRINGS))
.expect('Content-Type', 'image/png')
.expect(200, done)
})
})
変換サーバーという都合上、レスポンスボディの多くはPDF、PNGなどのバイナリなので文字列チェックは行えず、とりえあず面倒なのでcontent typeだけ見てる。
今後出力サイズの変更機能をテストしたくなったらPDFを読むライブラリなどを使わなければいけないだろうか。
テストの仕方は、まずhcep-pdf-serverのDockerを起動した状態で
execで直接叩くか、
sudo docker exec {container id} mocha
一度bashで入ってから叩くのもできる
sudo docker ecec -it {container id} bash