MatMenuItemHarness 未拾取物品

问题描述 投票:0回答:1

我正在尝试点击

mat-menu-item
按钮访问广告。我正在使用
MatMenuItemHarness
访问该元素,但测试失败并显示消息:

错误:无法找到与以下查询之一匹配的元素: (MatMenuItemHarness 与主机元素匹配选择器:“.mat-mdc-menu-item”)

这是相关的html:

<mat-menu #menu="matMenu" class="user-menu">
  <button
    mat-menu-item
    class="edit-profile-button"
    aria-label="Edit profile button"
    [routerLink]="['../edit-profile']"
    >Edit Profile
  </button>
  <button
    mat-menu-item
    aria-label="Logout button"
    class="logout-button"
    (click)="logout()"
    >Logout
  </button>
</mat-menu>

这是测试:

  describe('logout button', () => {
    it('should emit the logoutUser event when clicked', async () => {
      spyOn(component.logoutUser, 'emit');
      component.loggedOnUser$ = of(new User());
      const userMenu = await loader.getHarness(MatMenuHarness);
      await userMenu.open();
      const btn = await loader.getHarness(MatMenuItemHarness);
      await btn.click();
      expect(component.logoutUser.emit).toHaveBeenCalled();
    });
  });

我设置了另一个测试,确认运行测试时菜单项是否存在:

  describe('logout button', () => {
    it('should emit the logoutUser event when clicked', async () => {
      component.loggedOnUser$ = of(new User());
      const userMenu = await loader.getHarness(MatMenuHarness);
      await userMenu.open();
      const items = await userMenu.getItems();
      expect(items.length).toBe(2) // THIS PASSES
      expect((await loader.getAllHarnesses(MatMenuItemHarness)).length).toBe(2); //THIS FAILS
    });
  });

这是测试模块设置:

  beforeEach(() => {
    TestBed.configureTestingModule({
      imports: [
        ToolbarComponent,
        RouterTestingModule,
        MatMenuModule,
        MatButtonModule,
        BrowserAnimationsModule
      ]
    })
    fixture = TestBed.createComponent(ToolbarComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
    loader = TestbedHarnessEnvironment.loader(fixture);
  });

有人知道为什么

MatMenuItemHarness
在这种情况下不起作用吗?

angular unit-testing angular-material jasmine
1个回答
0
投票

我也面临同样的问题。因此,我深入研究代码,我突然意识到菜单项基本上存在是一个面板。 这就是为什么你无法通过调用 loader.getAllHarnesses(MatMenuItemHarness) 来获取线束的原因。

© www.soinside.com 2019 - 2024. All rights reserved.