在Aurelia中测试具有可绑定字段的类

时间:2015-09-07 18:42:26

标签: aurelia aurelia-binding

假设我有一个这样的课程:

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”             at getObserver(C:/Users/vinte/Documents/projects/mealcal/jspm_packages/github/aurelia/templating@0.15.1/aurelia-templating.js:2571:40)             at MyClass.descriptor.set [as text](C:/Users/vinte/Documents/projects/mealcal/jspm_packages/github/aurelia/templating@0.15.1/aurelia-templating.js:2628:9)             在对象。 (C:/Users/vinte/Documents/projects/mealcal/test/unit/myclass.spec.js:26:16)

我想基于绑定到可绑定字段的值来测试bind方法是否具有正确的行为。

你是怎么做到的?

1 个答案:

答案 0 :(得分: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();
    });
  });

基本上,您需要专门为单元测试创​​建元素的实例。然后,您可以监视方法或确保绑定中的事情发生,例如valueChanged事件。那些单元测试应该显示两者的正确方法,所以如果您有任何其他问题,请告诉我。