Ich versuche Unit-Test diese Klasse, die eine Abhängigkeit von AppDB
und createStudy
hat, die ich verspotten muss. Um loszulegen Ich bin versucht zu Einheit testen Sie die einfache Methode startLoadingData
, die ein MobX sein geschieht action
Jest-Unit-Klasse mit Abhängigkeiten
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
}
}
Meine Testdatei unten wird immer nirgendwo, weil ein Fehler vorliegt geworfen wird im Zusammenhang mit einer separaten Abhängigkeit von sqlite3
in der AppDB
und createStudy
Importe. Mein Verständnis ist, dass, wenn ich diese zwei Abhängigkeiten spotte, ich den Fehler vermeiden kann, weil sie verspottet werden und nicht reale Implementierungen versuchen, sqlite3
zu verwenden.
// 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)
})
})
Wie Sie sehen können, versuchen eine Reihe von Dingen, aber ich scheint nirgends zu bekommen. Ich habe über manuelle Mocks gelesen, und dachte, dass das der Fall sein könnte, so machte ich einen manuellen Schein von Database
, aber nicht einmal sicher, ob ich das richtig mache.
const Database = jest.genMockFromModule('../Database.js')
module.exports = Database
ich nicht diese Dinge denken, aber es könnte erwähnenswert sein, dass AppDB
eine ES6 Klasse und createStudy
ist eine Methode.
Ich habe diese Dateistruktur mit dem folgenden Code implementiert: 'const sqlite3 = jest.genMockFromModule ('sqlite3'); module.exports = sqlite3; ' Grundsätzlich gibt es keine spezifischen Methoden, die ich verspottet werden muss, ich will nur nicht, dass es in dem tatsächlichen' sqlite3'-Knotenmodul aussieht, weil es aufgrund meiner Projektumgebung (Elektron) nicht mit Jest (Node) kompatibel ist. Es scheint jedoch, sogar mit diesem Mock, das eigentliche 'sqlite3' Modul wird immer noch referenziert. – nschwan94
Es scheint, dass ich mein eigenes Problem gelöst habe, das aufgrund der zwei "package.json" -Struktur meiner Elektronen-App entstanden ist, und dass die 'node_modules' in meinem' app'-Verzeichnis nicht die Bindung für den Knoten hatten, der darin war Mein Wurzelverzeichnis. Eine einfache Kopie der Bindung beseitigte den Fehler, den ich bekam, und beseitigte meine Theorie, dass ich die Bibliothek einfach verspotten sollte. Entschuldigung, dass die Frage tatsächlich spezifischer war, als sie erschien. Aber ich denke, im Prinzip ist Ihre Antwort nach allem, was ich über Jest gelesen habe, sinnvoll. – nschwan94