私はモックする必要があるAppDB
とcreateStudy
の依存関係を持つこのクラスを単体テストしようとしています。私はユニットテストにsqlite3
の別々の依存に関連スローされ、エラーがありますので、下記の私のテストファイルはどこにもなっていないMobX action
依存関係を持つJestユニットクラス
import { observable, action } from 'mobx'
import { Intent } from '@blueprintjs/core'
import { createStudy } from '../database/DatabaseInit'
import { AppDB } from '../database/Database'
export default class UIStore {
// ui state
// booleans indicating open/close state of modals
@observable createDialogue
@observable importDialogue
@observable revisionsDialogue
@observable runDialogue
// boolean indicating loading or waiting for async action
@observable loadingData
// array indicating navigation
@observable breadcrumbs
@observable processingMessages
constructor(rootStore) {
this.rootStore = rootStore
this.breadcrumbs = []
this.importDialogue = false
this.createDialogue = false
this.revisionsDialogue = false
this.runDialogue = false
// boolean to display loading blur on table that displays data
this.loadingData = false
// processing messages for import and other async loads
this.processingMessages = []
}
@action startLoadingData() {
this.loadingData = true
}
}
であることを起こる簡単な方法startLoadingData
をしようとしています開始するにはAppDB
およびcreateStudy
のインポートです。私が理解しているのは、これらの2つの依存関係を模倣すると、エラーを避けることができるということです。なぜなら、彼らは嘲笑され、実際の実装ではsqlite3
を使用しようとしないからです。
// UIStore domain store unit test
// import * as Database from '../../app/database/Database'
// import * as DatabaseInit from '../../app/database/DatabaseInit'
import UIStore from '../../app/stores/UIStore'
describe('UIStore',() => {
beforeEach(() => {
// jest.spyOn(Database, 'AppDB').andReturn('mockAppDB')
// jest.spyOn(DatabaseInit, 'createStudy').andReturn('createStudy')
jest.mock('../../app/database/Database')
// jest.mock('DatabaseInit')
})
it('starts loading data',() => {
const testUIStore = new UIStore(this)
testUIStore.startLoadingData()
expect(testUIStore.loadingData).toBe(true)
})
})
あなたが見ることができるように
、物事の束をしようが、私はどこでも取得していないようです。私は手動のモックについて読んだことがありますので、私はDatabase
のマニュアルモックを作ったが、それが正しく実行されているかどうかはわかりません。
const Database = jest.genMockFromModule('../Database.js')
module.exports = Database
私はこれが重要だと思ういけないが、それはAppDB
がES6クラスであり、createStudy
が方法であることは注目に値するかもしれません。
私は、次のコードでそのファイル構造を実装しました: 'const sqlite3 = jest.genMockFromModule( 'sqlite3'); module.exports = sqlite3; ' 基本的に私は嘲笑する必要のある具体的な方法はありません。実際のプロジェクト環境(Electron)のために実際の' sqlite3'ノードモジュールを見たくないのはJest(Node)と互換性がないからです。 しかし、このモックでも実際の 'sqlite3'モジュールはまだ参照されています。 – nschwan94
私は私の電子アプリケーションの2つの 'package.json'構造に起因する私自身の問題を解決したようで、' app'ディレクトリの 'node_modules'はそこにあったノードのバインディングを持っていません私のルートディレクトリ。バインディングの単純なコピーは、私が得ていたエラーを取り除き、ライブラリを単に模倣すべきであるという私の理論を排除しました。申し訳ありませんが、その質問は現実よりも具体的でした。しかし、私は原則として、あなたの答えは、私がJestについて読んだ他のすべてに応じて意味をなさないと思います。 – nschwan94