AppDB
依存関係がありcreateStudy
、モックする必要があるこのクラスを単体テストしようとしています。始めるためstartLoadingData
に、たまたまMobXである単純なメソッドの単体テストを試みていますaction
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
}
}
以下の私のテストファイルはどこにも行きsqlite3
ませ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
あり、メソッドであることは注目に値するかもしれません。