首页 > 解决方案 > Jasmine 测试:预期未定义等于 Object。(如何测试@input)

问题描述

我有这个错误的麻烦。我想我忘记了一些东西,无法弄清楚它是什么。任务很简单:只需测试我的简单组件。开始了:

import { Component, OnInit, Input } from '@angular/core';
import { ButtonModel } from './model/button.model';

@Component({
  selector: 'app-button',
  templateUrl: './button.component.html',
  styleUrls: ['./button.component.scss']
})
export class ButtonComponent implements OnInit {
  @Input() public button: ButtonModel;

  constructor() { }

  public ngOnInit(): void {
  }

  public getClasses(): [string, string] {
    return [
      this.button.Size,
      this.button.Color
    ];
  }
}

和测试:

import { Spectator, createHostFactory } from '@ngneat/spectator';
import { RouterTestingModule } from '@angular/router/testing';
import { ButtonComponent } from './button.component';
import { MockComponent } from 'ng-mocks';


describe('[ButtonComponent]', () => {
  let spectator: Spectator<ButtonComponent>;
  const createHost = createHostFactory({
    component: MockComponent(ButtonComponent),
    imports: [RouterTestingModule]
  });

  beforeEach(() => {
    spectator = createHost('<app-button></app-button>');
  });

  it('should create', () => {
    expect(spectator.component).toBeTruthy();
  });

  it('should get default classes', () => {
    expect(spectator.component.getClasses()).toEqual(['big', 'primary-theme-color']);
  });
});

和 HTML:

<button [ngClass]="getClasses()">
  {{button.Text}}
</button>

还有那个错误:

预期未定义等于 ['big', 'primary-theme-color']。错误:预期未定义等于 ['big', 'primary-theme-color']。在用户上下文。( http://localhost:9876/_karma_webpack_/src/app/shared/components/button/button.component.spec.ts:24:46 ) 在 ZoneDelegate.invoke ( http://localhost:9876/_karma_webpack_/node_modules/ zone.js/dist/zone-evergreen.js:359:1 ) 在 ProxyZoneSpec.onInvoke ( http://localhost:9876/_karma_webpack_/node_modules/zone.js/dist/zone-testing.js:308:1 )

标签: angulartypescriptkarma-jasmine

解决方案


您正在使用旁观者进行测试,您可以阅读该工具的文档:https ://github.com/ngneat/spectator

在你的情况下,它会spectator.setInput('button', {Text: 'my text', Size: '...', Color: '...'})在你之前expect


推荐阅读