我試圖單元測試這一類,它具有的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
進口。我的理解是,如果我嘲笑這兩個依賴,我可避免的錯誤,因爲他們會被嘲笑,而不是真正的實現欲以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; ' 基本上沒有我不必嘲笑具體方法,我只是不希望它的實際'sqlite3'節點模塊中尋找,因爲由於我的項目環境(電子),它是用玩笑(節點)不兼容。 然而,似乎即使有這樣的模擬,實際'sqlite3'模塊仍然被引用。 – nschwan94
看來我已經解決我自己的問題,是由於起源於我的電子應用的兩個'package.json'結構,那'node_modules'在我的'app'目錄並沒有因爲這是在節點的綁定我的根目錄。一個簡單的綁定副本消除了我得到的錯誤,並消除了我應該簡單地嘲笑庫的理論。對不起,這個問題實際上比看起來更具體。但是,我認爲原則上,根據我讀過的關於Jest的其他所有內容,你的答案是有意義的。 – nschwan94