【问题标题】:Angular - Jasmine testing with PrimeNg Table - unable to verify row count inside of unittestAngular - 使用 PrimeNg 表进行 Jasmine 测试 - 无法验证单元测试中的行数
【发布时间】:2020-03-30 12:25:13
【问题描述】:

我正在尝试为使用 PrimeNG 表的角度组件创建单元测试。它在浏览器中使用 ng serve 可以正常工作,但在 Jasmine 测试中我无法获得表格的呈现 HTML。 当我检查标记时,它只包含以下行:

<p-table class="testtable"><!--container--><!--container--></p-table>

我创建了一个只有静态数据的新组件来重现问题:

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-test',
  template: `
  <p-table class="testtable" [value]="cars">
    <ng-template pTemplate="header">
        <tr>
            <th>Vin</th>
            <th>Year</th>
            <th>Brand</th>
            <th>Color</th>
        </tr>
    </ng-template>
    <ng-template pTemplate="body" let-car>
        <tr>
            <td>{{car.vin}}</td>
            <td>{{car.year}}</td>
            <td>{{car.brand}}</td>
            <td>{{car.color}}</td>
        </tr>
    </ng-template>
</p-table>
  `
})
export class TestComponent implements OnInit {

  cars = [
    {"brand": "VW", "year": 2012, "color": "Orange", "vin": "dsad231ff"},
    {"brand": "Audi", "year": 2011, "color": "Black", "vin": "gwregre345"},
    {"brand": "Renault", "year": 2005, "color": "Gray", "vin": "h354htr"},
    {"brand": "BMW", "year": 2003, "color": "Blue", "vin": "j6w54qgh"},
    {"brand": "Mercedes", "year": 1995, "color": "Orange", "vin": "hrtwy34"},
    {"brand": "Volvo", "year": 2005, "color": "Black", "vin": "jejtyj"},
    {"brand": "Honda", "year": 2012, "color": "Yellow", "vin": "g43gr"},
    {"brand": "Jaguar", "year": 2013, "color": "Orange", "vin": "greg34"},
    {"brand": "Ford", "year": 2000, "color": "Black", "vin": "h54hw5"},
    {"brand": "Fiat", "year": 2013, "color": "Red", "vin": "245t2s"}
];

  constructor() { }

  ngOnInit(): void {
  }
}

这里是测试(“应该渲染表”):

import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { TestComponent } from './test.component';
import { By } from '@angular/platform-browser';

describe('TestComponent', () => {
  let component: TestComponent;
  let fixture: ComponentFixture<TestComponent>;


  beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [
        TestComponent
      ],
    }).compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(TestComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
  });

  it("should render table", () => {
    debugger;
    const result = fixture.debugElement.queryAll(By.css(".testtable"));
    const markup = result[0].nativeNode.outerHTML;
    console.log(markup);

    //const tableEl = fixture.debugElement.query(By.css('div'));
    //const bodyRows = tableEl.query(By.css('.ui-table-tbody')).queryAll(By.css('tr'));
    //expect(bodyRows.length).toEqual(10);
  });
});

目前我正在使用 Angular 9.0.6 和 PrimeNG 9.0.0。

我已经尝试了不同的其他方法,例如在 createComponent 之后使用 compileComponent 或使用异步辅助函数进行测试,但完全没有运气。此外,我在 PrimeFaces 论坛上也提出了同样的问题,但一周没有得到回复。

任何帮助将不胜感激!

【问题讨论】:

    标签: angular unit-testing jasmine primeng-table


    【解决方案1】:

    您的规范缺少从primeng 导入的表模块。我认为这可能是问题所在。

    请按如下方式更新规范

    import {TableModule} from 'primeng/table';
    
    beforeEach(async(() => {
        TestBed.configureTestingModule({
          declarations: [
            TestComponent
          ],
          imports:[TableModule]
        }).compileComponents();
      }));
    

    如果它不起作用,请告诉我

    【讨论】:

    • 我遇到了一个问题,即“scrollHeight”被报告为只读值,并且单元测试失败。导入 TableModule 解决了我的问题!非常感谢!我一直在寻找答案,但这只是一个有效的答案。再次感谢:)!
    • 很高兴听到这个消息。
    猜你喜欢
    • 2023-01-13
    • 2016-08-14
    • 2016-05-05
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多