Тестирование класса с привязываемым полем в Аурелии

Допустим, у меня есть такой класс:

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 событие. Эти модульные тесты должны показать правильный способ сделать оба, поэтому, если у вас есть какие-либо вопросы, пожалуйста, дайте мне знать.

Другие вопросы по тегам