我有一些组件TestComponent,在它的模板中,使用一个<mat-stepper>。由于步骤的上下文,我必须以编程方式进入下一步,而不是在按钮上使用matStepperNext指令。我的组件看起来是这样的:
test.component.ts
import { MatStepper } from '@angular/material/stepper'; //module loaded elsewhere, but is accesible
@Component({
selector: 'app-test',
template: '<mat-stepper #stepper>
<mat-step>
<button (click)="completeStep()">Next</button>
</mat-step>
<mat-step></mat-step> <!-- etc. -->
</mat-stepper>',
})
export class TestComponent {
@ViewChild('stepper') stepper!: MatStepper;
completeStep() {
this.stepper.next();
}
}现在的诀窍是,我必须测试是否调用了stepper.next()。因为我只是在使用<mat-dialog>指令,所以我从未在类中实际创建它的对象,也没有在构造函数中创建它的提供程序,所以我不太确定如何测试它。我尝试了很多不同的方法,但都没有成功,我最近的测试如下:
test.component.spec.ts
describe('TestComponent', () => {
let component: TestComponent,
let fixture: ComponentFixture<TestCompnent>;
beforeEach(async () => {
await TestBed.ConfigureTestingModule({
declarations: [TestComponent],
}).compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(TestComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
describe('completeStep', () => {
it('should call stepper.next', () => {
const stepperSpy = jasmine.createSpyObj('MatStepper', ['next']);
component.stepper = stepperSpy;
component.completeStep();
expect(stepperSpy.next).toHaveBeenCalled();
});
});
});但我只是得到了错误
期望间谍MatStepper.next被称为
发布于 2022-12-02 20:18:48
在每个声明数组之前,将MatStepper添加到声明数组:
beforeEach(async () => {
await TestBed.ConfigureTestingModule({
declarations: [TestComponent, MatStepper],
}).compileComponents();
});测试用例应该如下所示:
it('completeStep should call stepper.next', () => {
jest.spyOn(component.stepper, 'next');
component.completeStep();
expect(component.stepper.next).toHaveBeenCalled();
});https://stackoverflow.com/questions/70311236
复制相似问题