Im с использованием 1.0.0-beta.1 Aurelia и попытайтесь написать некоторые модульные тесты.Тестирование aurelia customElement с привязкой и зависимостями
У меня есть customElement вроде этого:
...
@inject(BindingEngine, Class1, Class2)
export class MyElement{
@bindable data;
constructor (bindingEngine, class1, class2) {
...
}
...
И я хочу, чтобы создать тестируемый экземпляр MyElement с Mocks из Class1 & class2 и рабочих данных Привязываемое поля.
Что я узнал - до сих пор, что примеры с BehaviorInstance больше не работают из-за изменений API described here.
Посмотрев в Tests from aurelia-templating, мой подход выглядит какой-то вроде этого:
import {TemplatingEngine} from 'aurelia-templating';
import {Container} from 'aurelia-dependency-injection';
import {BindingEngine} from 'aurelia-binding';
import { Class1Mock, Class2Mock } from './myMocks';
describe('The MyElement customElement',() => {
let container;
let bindingEngine;
let templateEngine;
let myElement;
beforeEach(() => {
container = new Container();
//Add my mocks to DI container?
container.registerInstance('Class1', new Class1Mock());
container.registerInstance('Class2', new Class2Mock());
templateEngine = container.get(TemplatingEngine);
bindingEngine = container.get(BindingEngine);
myElement = templateEngine.createViewModelForUnitTest(MyElement);
}
it('should be initialized', (done) => {
expect(myElement).not.toBe(null);
expect(myElement).not.toBe(undefined);
done();
});
}
Он проваливается уже запрашивающий bindingEngine от DI контейнера или когда оставлено при создании MyElement-VieModel
Error: Error invoking TaskQueue. Check the inner error for details.
------------------------------------------------
inner error: TypeError: _aureliaPal.DOM.createMutationObserver is not a function
at makeRequestFlushFromMutationObserver (.../jspm_packages/npm/[email protected]/aurelia-task-queue.js:13:36)
at new TaskQueue (.../jspm_packages/npm/[email protected]/aurelia-task-queue.js:59:41)
at Object.invoke (.../jspm_packages/npm/[email protected]/aurelia-dependency-injection.js:334:14)
at InvocationHandler.invoke (.../jspm_packages/npm/[email protected]/aurelia-dependency-injection.js:309:168)
at Container.invoke (.../jspm_packages/npm/[email protected]/aurelia-dependency-injection.js:557:25)
at StrategyResolver.get (.../jspm_packages/npm/[email protected]/aurelia-dependency-injection.js:145:37)
at Container.get (../jspm_packages/npm/[email protected]/aurelia-dependency-injection.js:488:41)
at Object.invoke (.../jspm_packages/npm/[email protected]/aurelia-dependency-injection.js:354:33)
at InvocationHandler.invoke (.../jspm_packages/npm/[email protected]/aurelia-dependency-injection.js:309:168)
at Container.invoke (.../jspm_packages/npm/[email protected]/aurelia-dependency-injection.js:557:25)
at StrategyResolver.get (.../jspm_packages/npm/[email protected]/aurelia-dependency-injection.js:145:37)
at Container.get (.../jspm_packages/npm/[email protected]/aurelia-dependency-injection.js:488:41)
at Object.invoke (.../jspm_packages/npm/[email protected]/aurelia-dependency-injection.js:354:33)
at InvocationHandler.invoke (.../jspm_packages/npm/[email protected]/aurelia-dependency-injection.js:309:168)
at Container.invoke (.../jspm_packages/npm/[email protected]/aurelia-dependency-injection.js:557:25)
at StrategyResolver.get (.../jspm_packages/npm/[email protected]/aurelia-dependency-injection.js:145:37)
at Container.get (.../jspm_packages/npm/[email protected]/aurelia-dependency-injection.js:488:41)
at new AggregateError (.../jspm_packages/npm/[email protected]/aurelia-pal.js:20:13)
at Container.invoke (.../jspm_packages/npm/[email protected]/aurelia-dependency-injection.js:559:15)
at Object.invoke (.../jspm_packages/npm/[email protected]/aurelia-dependency-injection.js:344:33)
Итак, как мне это сделать правильно?
------ Edit:
Ответ от Michael Malone работает отлично. Для любого, кто пришел на этот вопрос, это как мой пример работы:
import {TemplatingEngine} from 'aurelia-templating';
import {Container} from 'aurelia-dependency-injection';
import {BindingEngine} from 'aurelia-binding';
import {initialize} from 'aurelia-pal-browser';
import { Class1Mock, Class2Mock } from './myMocks';
describe('The MyElement customElement',() => {
let container;
let bindingEngine;
let templateEngine;
let myElement;
initialize();
beforeEach(() => {
container = new Container();
//Add my mocks to DI container?
container.registerInstance('Class1', new Class1Mock());
container.registerInstance('Class2', new Class2Mock());
templateEngine = container.get(TemplatingEngine);
bindingEngine = container.get(BindingEngine);
myElement = templateEngine.createViewModelForUnitTest(MyElement);
}
it('should be initialized', (done) => {
expect(myElement).not.toBe(null);
expect(myElement).not.toBe(undefined);
done();
});
}
Спасибо! Наконец ... =) Ты мой герой дня! – jmenzel