2015-09-07 3 views
4

Скажем, у меня есть класс, как это:Тестирование класса с привязываемому поля в Aurelia

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/Документы/проекты/mealcal/jspm_packages/ги thub/aurelia/[email protected]/aurelia-templating.js: 2571: 40) на MyClass.descriptor.set [в виде текста] (C:/Users/vinte/Documents/projects/mealcal/jspm_packages/github/aurelia /[email protected]/aurelia-templating.js:2628:9) у объекта. (C: /Users/vinte/Documents/projects/mealcal/test/unit/myclass.spec.js: 26: 16)

Я хотел бы проверить, что метод привязки имеет правильное поведение, основанное на значении привязан к привязываемому полю.

Как вы это делаете?

ответ

6

Для модульного тестирования вашего пользовательского элемента с свойствами @bindable существует вспомогательный метод, определенный в шаблоне репо.

Here является примером тестирования пользовательского элемента.

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(); 
    }); 
    }); 

В принципе, вам нужно создать экземпляр вашего элемента специально для его тестирования. Затем вы можете следить за методами или следить за тем, что происходит в вашем bindable, таком как событие valueChanged. Те модульные тесты должны показать правильный способ сделать оба, поэтому, если у вас есть другие вопросы, пожалуйста, дайте мне знать.