在 Aurelia 中使用可绑定字段测试 class

Testing a class with a bindable field in Aurelia

假设我有这样一个 class:

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:40) 在 MyClass.descriptor.set [作为文本] (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)

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

你是怎么做到的?

为了对具有 @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 事件。这些单元测试应该显示执行这两项操作的正确方法,所以如果您有任何其他问题,请告诉我。