无法从单元测试中更改组件的属性

时间:2017-09-06 21:50:27

标签: angular jasmine karma-runner karma-jasmine angular2-testing

我正在尝试编写测试以确保我的方法根据组件的某个属性返回正确的值。 所以在我的单元测试中,我想设置组件属性的值,然后调用组件的方法,该方法应该根据该值返回一个布尔值,但是它没有按预期工作。

组件的方法非常简单:

isLoading(): boolean {
    return this.matches === [];
}

这是我目前的单元测试:

it('should have isLoading reflect whether there are matches', () => {
    expect(component.matches).toBeDefined();

    component.matches = [];
    console.log(component.isLoading());
    expect(component.isLoading()).toEqual(true);

    component.matches = [{name: 'object'}];
    console.log(component.isLoading());
    expect(component.isLoading()).toEqual(false);
});

两个console.logs都输出false,我不确定原因。

2 个答案:

答案 0 :(得分:0)

如果未定义matches或为null,则它不是数组类型。 所以你可以比较一下:

if (this.matches is an array and empty)...
// but if it is not initialized (undefined) or initialized as null...

尝试:

isLoading(): boolean {
    return !this.matches || (this.matches && this.matches === []);
    // i would leave the () brackets to make it easier to read
}

或例如:

isLoading(): boolean {
    return !this.matches || !this.matches.length;
}

查看您声明this.matches的位置。 例如。在构造函数中:

constructor(
    public matches: any[] = null
) {}

或:

export class MyComponent {
    public matches: any[] // <- undefined, not initialized

答案 1 :(得分:0)

我犯了假设[] == []

的错误

在javascript中,将对象(包括数组)与==或===进行比较会检查它们是否是同一个对象,在这种情况下它们不是。

Why isn't [1,2,3] equal to itself in Javascript?