【发布时间】:2019-04-04 07:31:05
【问题描述】:
我正在为 Angular 7 中的 ngx-bootstrap (bsDateRangePickerDirective) 编写测试用例。但是当我尝试从规范文件中打开 bsdaterangePickerDirective 实例时,我收到无法读取未定义的属性显示的错误。
以下是我写的代码:
component.ts 文件
@ViewChild("sdp") sdatepicker: BsDaterangepickerDirective;
// Function
openDatePicker() {
this.sdatepicker.show();
}
Component.spec.ts 文件
import { ComponentFixture, async, TestBed } from "@angular/core/testing";
import { NO_ERRORS_SCHEMA } from "@angular/core";
import { NameComponent } from "./name-box.component";
import { FormsModule } from "@angular/forms";
import { BsDatepickerModule, BsDaterangepickerDirective } from "ngx-bootstrap";
import { HttpClientTestingModule } from "@angular/common/http/testing";
describe('NameComponent', () => {
let fixture: ComponentFixture<SearchBoxComponent>;
let component: SearchBoxComponent;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [NameComponent],
imports: [
FormsModule,
BsDatepickerModule,
HttpClientTestingModule
],
schemas: [NO_ERRORS_SCHEMA],
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(NameComponent);
component = fixture.componentInstance;
});
it('Should open date picker', () => {
const dateSpy = spyOn(BsDaterangepickerDirective.prototype, "show").and.returnValue(true);
component.openDatePicker('sdatepicker');
expect(dateSpy).toHaveBeenCalled();
});
});
组件模板文件:
<div class="grid-search-datepicker date-selector">
<input type="text" class="form-control" id="start-date-selector_{{searchTableId}}" [(ngModel)]="dateRange.startDate"
bsDatepicker #sdp="bsDatepicker" (onHidden)="updateMinEndDate()" [bsConfig]="startDateConfig" placeholder="{{l10n.fromdate}}"
readonly>
<i class="icon-small-calendar text-blue open-datetimepicker" (click)='openDatePicker("sdatepicker")' aria-hidden="true"></i>
</div>
【问题讨论】:
-
组件模板中的 ViewChild 是什么?
-
你还需要像下面这样更改它才能访问
BsDaterangepickerDirective属性:@ViewChild("sdp",{read: BsDaterangepickerDirective}) sdatepicker: BsDaterangepickerDirective; -
@Mike:通过 ViewChild,我正在使用 sdp 作为本地引用变量从 HTML 访问 bsDatePicker 模板
-
@HarunYılmaz:我尝试了您的解决方案,但没有成功
-
没有我的不是完整的解决方案。它只是其中的一部分。除非看到模板文件,否则我什么也说不出来
标签: javascript angular jasmine ngx-bootstrap