/ / Aurelia esegue il test dei componenti con <compose> - javascript, unit test, aurelia, aurelia-framework, aurelia-dialog

Aurelia prova componenti con <compose> - javascript, unit test, aurelia, aurelia-framework, aurelia-dialog

Sto provando a testare un componente di dialogo personalizzato con cui essere usato aurelia-dialog che ottiene i vincoli di proprietà attraverso un activate() metodo. Per testare il componente, sto configurando i test con a <compose> elemento che utilizza anche il activate() metodo in questo modo:

beforeEach(() => {
component = StageComponent
.withResources("path/to/dialogComponent")
.inView(`<compose view-model="path/to/dialogComponent" model.bind="mockModel">
</compose>`)
.boundTo(mockModel);
});

Tuttavia, quando vengo a testare il modello di vista per le proprietà vincolate, ottengo un valore nullo in corrispondenza del modello di visualizzazione attuale.

describe("#someComponentMethod()", () => {
it("Should exist", done => {
// In the past, I succesfully accessed child viewModels for
// compose through the following property, after a general package update,
// this seems not to work anymore
let viewModel = component.viewModel.currentViewModel

expect(viewModel.someComponentMethod).toBeDefined();
// ==> Runtime error, since currentViewModel === null

done();
});
});

Esiste un modo conosciuto o migliore per testare elementi personalizzati che non hanno proprietà associabili ma si basano su un modello per il quale essere vincolati activate()?


Inoltre, per testare il rendering: sembra esserci un problema simile che potrebbe essere correlato: Aurelia Testing Composed Custom Element

risposte:

0 per risposta № 1

puoi chiamare la funzione create e passare in boostrap importato da aurelia-bootstrapper in questo modo:

import { bootstrap } from "aurelia-bootstrapper";

...

component.create(bootstrap);

Quando chiamo create, viewModel è costruito epopolato. La funzione di creazione è attendibile in modo da poter accedere alla proprietà viewmodel in .then (() => component.viewModel) oppure utilizzare async / attendere in questo modo:

await component.create(bootstrap);