假设我有一个这样的课程:
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方法是否具有正确的行为。
你是怎么做到的?
答案 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
事件。那些单元测试应该显示两者的正确方法,所以如果您有任何其他问题,请告诉我。