无法通过单元测试更改组件的 属性

Not able to change a component's property from unit test

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

组件的方法很简单:

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,我不确定为什么。

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

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

我错误地假设 [] == []

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

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