ブラウザ固有の機能を使うTypeScript/JavaScriptをテストしたいとき
#WebブラウザのJavaScript #TypeScript
やりたいこと
ブラウザでのTypeScriptをテストしたいときの方法。
やりかた
この変更が参考になる。
https://github.com/nwtgck/aes128gcm-stream-npm/commit/d0b9f5d0933a30d6ba7f9d77f29285b88e9e4f02#diff-22d221739f9dc3ffd50b561c1f3c1fb7
実際の流れを書くと。
以下でKarmやJasmineなどやChromeやFirefoxを使うための依存関係を入れる。
code:bash
npm i -D @types/jasmine jasmine-core karma karma-chrome-launcher karma-cli karma-jasmine karma-typescript karma-firefox-launcher
package.jsonの"test"を以下に書き換える。
code:package.json
...
"test": "karma start",
...
以下の内容のkarma.conf.jsを生成する。
code:karma.conf.js
module.exports = function(config) {
config.set({
frameworks: "jasmine", "karma-typescript",
files: [
{ pattern: "src/**/*.ts" },
{ pattern: "test/**/*.ts" },
],
preprocessors: {
"**/*.ts": "karma-typescript"
},
reporters: "dots", "karma-typescript",
browsers: "ChromeHeadless", "FirefoxHeadless",
singleRun: true
});
};
以下のようにlib:に"dom"を加える。
code:tsconfig.json
{
"compilerOptions": {
...
"lib": "es2015", "dom",
},
...
}
動作確認
動作確認のために以下の内容をtest/index.tsに貼り付けて、npm testを実行する。
code:test/index.ts
describe('console.log', () => {
it('should show window object', () => {
console.log(typeof window);
// => 'object'
});
});
windowはNode.jsなら存在しないのでそれを使って確認している。
Web CryptoやReadableStreamなどNode.jsにはない機能をテストするためにヘッドレスなChromeやFirefoxを使ってテストを行なっている。
同じ手法でテストしているプロジェクト一覧
nwtgck.iconの以下のプロジェクトではブラウザ上でのテスト+CIをしているので参考になるかもしれない。
https://github.com/nwtgck/binconv-npm/tree/3681054518d3ccbefa02ff47ae9b111e6d818b92
https://github.com/nwtgck/aes128gcm-stream-npm/tree/be347566028f6364b46d25c7b96f3ae3882d6d5b
https://github.com/nwtgck/web-ssh-keygen/tree/4a60fe31c97697206348436d91d50febfad0f86b
https://github.com/nwtgck/readable-stream-sized-reader-npm/tree/ac55555e62f390b229d9aaee4f81b9c2a7e40fa1