我正在尝试对这个具有依赖关系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
inAppDB
和createStudy
导入中的单独依赖项相关的错误。我的理解是,如果我模拟这两个依赖项,我可以避免错误,因为它们将被模拟,而不是尝试使用的真实实现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
是一种方法。