電子冒険:エピソード24:単位テスト電子
10889 ワード
前のエピソードでは
インストールによって起動できます
JavaScriptのテストを整理するための2つのコンベンションがあります
私が試した最初のことは
それで、簡単なことをしましょう
そして、コードの残りの部分を
私は低レベルシステムコールをチェックすることに興味がありません. これは私たちのテストに十分です-それは特別なファイルを確認することはありませんし、ファイルを削除したときに我々の機能を実行しているが、あまりにも空想を取得しないでください.
残念ながらいくつかの問題があります.我々は何が正確になるのか分からない
それで、私はちょうど線に沿って何かをすると思いました:
したがって、ここではspecファイルがあります.
正直に言うと、我々はその多くのコードを
我々はバックエンドの何かの非常に類似したテストをすることができます-ちょうど別々のファイルにすべての複雑なロジックを動かして、それらのファイルをテストしてください.これらは通常のノード環境で実行される.
次に、全体のいくつかの統合テストを追加します.
結果を以下に示します.
次のいくつかのエピソードでは、我々のアプリのいくつかの純粋なフロントエンドのコーディングを行う予定です.
いつものように.all the code for the episode is here .
fileInfo
ファンクションpreload.js
かなり長いので、いくつかのテストを書きましょう.インストールによって起動できます
jest
, JavaScriptの最も人気のあるバックエンドテストフレームワークのようです.$ npm install --save-dev jest
そして、我々はそれを入れることもできますpackage.json
便宜上 "test": "jest"
プリロードテストの問題js
JavaScriptのテストを整理するための2つのコンベンションがあります
__tests__
フォルダのすべての場所に.私は、散乱テストの魅力が全く理解されなかったので、我々はきちんとしたことをしていて、彼ら全員を持っていますspec
.私が試した最初のことは
spec/preload.spec.js
とインポートpreload.js
そこから.残念なことにcontextBridge.exposeInMainWorld
定義されていない.プリロードを書き換える。js
それで、簡単なことをしましょう
preload.js
これにはlet { contextBridge } = require("electron")
let api = require("./preload/api")
contextBridge.exposeInMainWorld("api", api)
これはどのような単体テストでも必要ない.それは、後で統合テストによってカバーされます.そして、コードの残りの部分を
preload.js
to preload/api.js
, これでexport
:module.exports = {
directoryContents,
currentDirectory,
}
テストを加える
私は低レベルシステムコールをチェックすることに興味がありません.
spec/preload/examples
spec/preload/examples/example_01.md
- 5バイトの小さなファイルspec/preload/examples/example_02.md
- へのシンボリックリンクexample_01.md
spec/preload/examples/example_03
- ディレクトリspec/preload/examples/example_03/.gitkeep
- 空のファイルのため、実際にgitに保存されます.gitが空のディレクトリをしないのでspec/preload/examples/example_04
- リンクexample_03
spec/preload/examples/missing
- 壊れたシンボリック残念ながらいくつかの問題があります.我々は何が正確になるのか分からない
Date
リポジトリにファイルを置いてチェックアウトすれば、同じ最後の変更された日付が出てくるという保証はありません.それで、私はちょうど線に沿って何かをすると思いました:
expect(result[0].mtime).toBeInstanceOf(Date)
しかし、それは神秘的に戻りました: Expected constructor: Date
Received constructor: Date
ノードのように見えるDate
クラス?それは我々がやっていることに非常に付随的であるので、私はそれをさらに調査しませんでした.誰かが答えを知っているならば、コメントで知らせてください.spec / preload / API。京大理
したがって、ここではspecファイルがあります.
let path = require('path')
let api = require("../../preload/api.js")
test("currentDirectory", () => {
expect(api.currentDirectory()).toEqual(path.join(__dirname, "../.."))
})
test("directoryContents", async () => {
let examplesDir = `${__dirname}/examples`
let result = await api.directoryContents(examplesDir)
expect(result).toMatchObject([
{
linkTarget: null,
name: "example_01.md",
mtime: expect.anything(),
size: 6,
type: "file",
},
{
linkTarget: "example_01.md",
name: "example_02.md",
mtime: expect.anything(),
size: 6,
type: "file",
},
{
linkTarget: null,
name: "example_03",
mtime: expect.anything(),
type: "directory",
},
{
linkTarget: "example_03",
name: "example_04",
mtime: expect.anything(),
type: "directory",
},
{
linkTarget: "example_05.md",
name: "missing",
type: "broken",
},
])
})
もちろん、我々はより多くのテストを行うことができますが、それはスタートです.バックエンドコードをテストする方法
正直に言うと、我々はその多くのコードを
preload
- バックエンドへのいくつかの呼び出しをセットアップするために最小限の作業をするべきです、そして、論理はバックエンドになければなりません.我々はバックエンドの何かの非常に類似したテストをすることができます-ちょうど別々のファイルにすべての複雑なロジックを動かして、それらのファイルをテストしてください.これらは通常のノード環境で実行される.
次に、全体のいくつかの統合テストを追加します.
結果
結果を以下に示します.
次のいくつかのエピソードでは、我々のアプリのいくつかの純粋なフロントエンドのコーディングを行う予定です.
いつものように.all the code for the episode is here .
Reference
この問題について(電子冒険:エピソード24:単位テスト電子), 我々は、より多くの情報をここで見つけました https://dev.to/taw/electron-adventures-episode-24-unit-testing-electron-3a5bテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol