Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角业力测试:方法不';不改变类属性?_Javascript_Angular_Typescript_Unit Testing_Karma Jasmine - Fatal编程技术网

Javascript 角业力测试:方法不';不改变类属性?

Javascript 角业力测试:方法不';不改变类属性?,javascript,angular,typescript,unit-testing,karma-jasmine,Javascript,Angular,Typescript,Unit Testing,Karma Jasmine,我很难理解为什么我的考试不及格 课程简介: export class Viewer implements OnChanges { // ... selectedTimePeriod: number; timePeriods = [20, 30, 40]; constructor( /* ... */) { this.selectLastDays(15); } selectLastDays(days: number

我很难理解为什么我的考试不及格

课程简介:

export class Viewer implements OnChanges {
    // ...
    selectedTimePeriod: number;
    timePeriods = [20, 30, 40];
    
    constructor( /* ... */) {
        this.selectLastDays(15);
    }
    
    selectLastDays(days: number): void { // happens on click
        this.selectedTimePeriod = days;
        // ...
    }
}
HTML短片:

// ...
<ul>
    <li *ngFor="let period of timePeriods">
        <a [ngClass]="{'active': selectedTimePeriod === period}" 
           (click)="selectLastDays(period)">{{ period }} days
        </a>
    </li>
</ul>
/。。。
    {{period}}天
测试短路:

beforeEach(() => {
    fixture = TestBed.createComponent(HistoryViewerComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
    dh = new DOMHelper(fixture);
});


it('should change selectedTimePeriod value to 20', async () => {
    spyOn(component, 'selectLastDays');

    dh.queryOne('li a').triggerEventHandler('click', null); // button value of 20
    dh.queryOne('li a').nativeElement.click(); // clicked even twice
    await fixture.whenStable();
    fixture.detectChanges();
    expect(component.selectLastDays).toHaveBeenCalledTimes(2); // <- true
    expect(component.selectedTimePeriod).toEqual(20); // <- false
});

it('should change selectedTimePeriod', () => { // this test passes
    expect(component.selectedTimePeriod).toEqual(15);
    component.selectLastDays(20);
    expect(component.selectedTimePeriod).toEqual(20);
});
beforeach(()=>{
fixture=TestBed.createComponent(HistoryViewerComponent);
组件=fixture.componentInstance;
fixture.detectChanges();
dh=新的DOMHelper(夹具);
});
它('应将selectedTimePeriod值更改为20',异步()=>{
spyOn(组件“selectLastDays”);
dh.queryOne('li a').triggerEventHandler('click',null);//按钮值为20
dh.queryOne('li a').nativeElement.click();//甚至单击了两次
等待fixture.whenStable();
fixture.detectChanges();

expect(component.selectLastDays).tohaveEncalledTimes(2);//第一次测试的问题是,您实际上监视
selectLastDays
方法。仅使用spyOn将创建一个空存根,使函数存在,但函数不会执行任何操作

如果您需要存根来验证方法是否被调用,那么您应该告诉存根实际执行函数

it('应将selectedTimePeriod值更改为20',异步()=>{

spyOn(组件'selectLastDays')。和.callThrough();//如何将
days
参数传递给
selectLastDays
方法?更新了example@Smokovsky:您是否可以将控制台日志放入
spec
文件并确认
组件的值。选择了timeperiod
。我想应该是
expect(component.selectedTimePeriod)。要成为(20)
,请注意您已将
30
放入
it
block expectationconsole.log(component.selectedTimePeriod)在测试方法中给出了15。是的,谢谢这30,这只是编辑、更新中的一个错误。哦,是的,谢谢:)
it('should change selectedTimePeriod value to 20', async () => {
    spyOn(component, 'selectLastDays').and.callThrough();  // <= !!important

    dh.queryOne('li a').triggerEventHandler('click', null); // button value of 20
    dh.queryOne('li a').nativeElement.click(); // clicked even twice
    await fixture.whenStable();
    fixture.detectChanges();
    expect(component.selectLastDays).toHaveBeenCalledTimes(2); // <- true
    expect(component.selectedTimePeriod).toEqual(20); // <- false
});