Тестирование класса с привязываемым полем в Аурелии
Допустим, у меня есть такой класс:
import {bindable} from 'aurelia-framework';
export default class MyClass {
@bindable text = null;
bind() {
this.message = `Message: ${this.text}`;
}
}
И в моем тестовом коде у меня есть следующий код:
import MyClass from '../../src/myclass';
describe('MyClass', () => {
let sut;
beforeEach(() => sut = new MyClass());
describe('bind', () => {
beforeEach(() => {
sut.text = "my text";
sut.bind();
});
it('should have a message', () => {
expect(sut.message).toBe('Message: my text');
});
});
});
Когда я запускаю этот тест, я выдаю следующую ошибку:
TypeError: Невозможно прочитать свойство 'getOrCreateObserversLookup' с неопределенным значением в getObserver (C:/Users/vinte/Documents/projects/mealcal/jspm_packages/github/aurelia/templating@0.15.1/aurelia-templating.js:2571:4071: 4071: 4071) в).descriptor.set [как текст] (C:/Users/vinte/Documents/projects/mealcal/jspm_packages/github/aurelia/templating@0.15.1/aurelia-templating.js:2628:9) в Object. (C:/Users/vinte/Documents/projects/mealcal/test/unit/myclass.spec.js:26:16)
Я хотел бы проверить, что метод привязки имеет правильное поведение на основе значения, связанного с полем привязки.
Как ты это делаешь?
1 ответ
Для модульного тестирования вашего пользовательского элемента с @bindable
В свойствах есть вспомогательный метод, определенный в шаблонном репо.
Вот пример тестирования пользовательского элемента.
it('should raise value change on simple custom element', done => {
var ele = BehaviorInstance.createForUnitTest(SimpleElement);
spyOn(ele, 'fooChanged');
spyOn(ele, 'barChanged');
ele.foo = 'new foo';
ele.bar = 'new bar';
setTimeout(() => {
expect(ele.fooChanged).toHaveBeenCalledWith('new foo', 'foo');
expect(ele.barChanged).toHaveBeenCalledWith('new bar', 'bar');
done();
});
});
По сути, вам нужно создать экземпляр вашего элемента специально для его модульного тестирования. Затем вы можете шпионить за методами или гарантировать, что вещи в вашем привязываемом случае, такие как valueChanged
событие. Эти модульные тесты должны показать правильный способ сделать оба, поэтому, если у вас есть какие-либо вопросы, пожалуйста, дайте мне знать.