Als Angular (2) -Entwickler habe ich kürzlich damit begonnen, mit Aurelia zu experimentieren. Wirklich mag es übrigens .. Aber ich habe wirklich einige Schwierigkeiten Uniteling Event Aggregator
. Dies ist, was ich derzeit habe, aber es löst das Ereignis in meinem Controller jetzt nicht aus. Ich mache es jetzt falsch, einige Hilfe wäre großartig!Aurelia: Unit-Testing Event-Aggregator
// app.js
@inject(UserService, EventAggregator)
export class App {
constructor(userService, eventAggregator) {
this.userService = userService;
this.eventAggregator = eventAggregator;
this.authorizedUser = null;
// get authorized user
this.getAuthorizedUser();
// subscribe to events
this.eventAggregator.subscribe(EVENTS.USER_LOGGED_IN, data => {
this.authorizedUser = data;
});
}
// calls userService and sets this.authorizedUser;
getAuthorizedUser() {
....
}
}
Und meine spec sieht derzeit wie folgt aus:
describe('app',() => {
let component,
createComponent,
eventAggregator = new EventAggregator(),
userService = new UserService();
beforeEach(() => {
component = StageComponent.withResources('app').inView('<app></app>');
component.bootstrap(aurelia => {
aurelia.use.standardConfiguration();
aurelia.container.registerInstance(UserService, userService);
aurelia.container.registerInstance(EventAggregator, eventAggregator);
});
createComponent = component.create(bootstrap);
});
// this one is working for example..
it('should get authorized user when token is set', (done) => {
const result = 'some value';
spyOn(UserService, 'getToken').and.returnValue(true);
spyOn(userService, 'getAuthorizedUser').and.returnValue(Promise.resolve('some value'));
createComponent.then(() => {
const viewModel = component.viewModel;
expect(viewModel.authorizedUser).toEqual(result);
done();
});
});
// this one is failing (depending on Event Aggregator)
it('should set authorized user when LOGGED_IN event is fired', (done) => {
spyOn(UserService, 'getToken').and.returnValue(false);
createComponent.then(() => {
const viewModel = component.viewModel;
expect(viewModel.authorizedUser).toEqual(null);
eventAggregator.publish(EVENTS.USER_LOGGED_IN, 'some value');
expect(viewModel.authorizedUser).toEqual('some value');
done();
});
});
afterEach(() => {
component.dispose();
});
});
Haben Sie die Instanzen von EventAggregator überprüft? Sind sie das selbe? Ich denke, sie sollten es tun, wenn Sie eine Instanz davon registrieren. Sie können jedoch versuchen, "registerSingleton()", obwohl ich denke, dass es keinen Unterschied machen sollte. –
Das Problem liegt daran, dass Sie 'new EventAggregator' verwenden. Ihre Klassen müssen die Instanz __same__ der EventAggregator-Klasse verwenden. Auch - ich vermute 'EVENTS.USER_LOGGED_IN' ist eine Art String? – Tom
@thebluefox Vielen Dank für Ihre Antwort, ja, es ist eine Zeichenfolge, die aus einer Konstante importiert wird. Auch aktualisiert beantwortet meine Frage mit einer (für mich) funktionierenden Lösung. Vielen Dank für Ihre Zeit! –