내가 모의 할 필요가있는 AppDB
및 createStudy
의 종속성을 가진이 클래스를 단위 테스트하려고합니다. 나는 MobX 될 일이 간단한 방법 startLoadingData
를 단위 테스트를 시도하고있어 시작하려면 action
종속성을 지닌 Jest Unit 클래스
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)
})
})
당신이 볼 수 있듯이, 많은 것들을 시도하지만 나는 어디에도 가지 않는 것처럼 보입니다. 나는 수동 mock에 대해 읽었고, 그럴 수도 있다고 생각했기 때문에 나는 Database
의 수동 모의를 만들었지 만, 내가 올바르게하고 있는지 확실하지는 않습니다.
const Database = jest.genMockFromModule('../Database.js')
module.exports = Database
나는이 문제를 생각 해달라고하지만 AppDB
는 ES6 클래스이고 createStudy
는 방법이다 협조 할 수 있습니다.
다음 코드로 파일 구조를 구현했습니다. 'const sqlite3 = jest.genMockFromModule ('sqlite3'); module.exports = sqlite3; ' 기본적으로 조롱을 받아야하는 구체적인 방법은 없습니다. 실제 프로젝트 환경 (Electron) 때문에 Jest (Node)와 호환되지 않기 때문에 실제로'sqlite3' 노드 모듈을보고 싶지는 않습니다. 그러나이 모의 문장을 사용해도 실제'sqlite3' 모듈은 여전히 참조되고 있습니다. – nschwan94
내 전자 응용 프로그램의 두 가지'package.json' 구조로 인해 발생한 문제를 해결했으며 내 app 디렉토리의 node_modules에있는 노드에 대한 바인딩이 없다는 것을 알았습니다 내 루트 디렉토리. 바인딩의 단순한 복사본은 내가 얻은 오류를 제거하고, 단순히 라이브러리를 조롱해야한다는 나의 이론을 제거했다. 죄송 합니다만 그 질문은 실제로 나타난 것보다 구체적이었습니다. 그러나 나는 원칙적으로 Jest에 관해 읽은 다른 모든 것에 따르면 당신의 대답이 합리적이라고 생각합니다. – nschwan94