无法通过单元测试更改组件的 属性
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?
我正在尝试编写测试以确保我的方法 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?