2017-09-06 48 views
-1

我在设置单元测试中名为searchUser的FormControl字段的值时遇到了问题。角度4单元测试问题 - 我想设置表单FormControl字段值

在下面的代码中,“this.searchUser.value”是一个表单控件。 所以在我的测试中,我这样做,所以我可以将它设置,但没有工作:

homeComponent.searchUser = new FormControl(); 
homeComponent.searchUser.value = "ste"; 

这是组件的方法我测试(mapUsers):

mapUsers(users: User[]): User[] { 
    let results: User[] = []; 

    users.forEach((user: User) => { 
     let name = user.name.toLowerCase(); 
     if (name.includes(this.searchUser.value.toLowerCase())) results.push(user);  
    }); 

    return results; 
    } 

这是我的充分的单元测试规范:

import { TestBed, async, inject } from "@angular/core/testing"; 
import { Observable } from "rxjs/Observable"; 
import { of } from 'rxjs/observable/of'; 
import { HttpClient, HttpHandler } from "@angular/common/http"; 
import { RouterTestingModule } from "@angular/router/testing"; 
import { FormControl } from "@angular/forms"; 

import { HomeComponent } from "./home.component"; 
import { HomeModule } from "./home.module"; 
import { UserService } from "../../services/user.service"; 
import { User } from "../../models/user.model"; 
import { HighlightDirective } from "../../directives/highlight.directive"; 

describe("HomeComponent",() => { 
    let userService; 
    let homeComponent; 
    let fixture; 

    beforeEach(() => { 
    TestBed.configureTestingModule({ 
     imports: [ 
     HomeModule, 
     RouterTestingModule.withRoutes([]) 
     ], 
     providers: [ 
     HttpClient, 
     HttpHandler, 
     UserService 
     ] 
    }) 
    }); 

    beforeEach(inject([UserService], service => { 
    userService = service; 
    fixture = TestBed.createComponent(HomeComponent); 
    homeComponent = fixture.componentInstance; 
    })); 

    it("should return array of users", async(() => { 
    // Arrange 
    const mockUsers: User[] = [{"name": "Steven"}]; 
    homeComponent.searchUser = new FormControl(); 
    homeComponent.searchUser.value = "ste"; 

    // Act 
    const mockResponse = homeComponent.mapUsers(mockUsers); 
    fixture.detectChanges(); 

    // Assert 
    expect(mockResponse).toEqual(mockUsers); 
    })); 

}); 

噶错误,我得到:

失败:[对象的对象]仅具有 吸气

+0

的可能的复制[Angualr2错误:的#无法设置属性值仅具有吸气剂](https://stackoverflow.com/questions/38810174/angualr2-error-cannot-set-property - 值-的-abstractcontrol-其中-具有 - onlyly) – jonrsharpe

回答

-1

不能直接设置form.You的值已经为使用patchValue或类似这样的setValue方法的不能设置的属性值

homeComponent.searchUser.patchValue({[formControlName]:[formControlValue]}) 
+0

你的意思是这样的在我的情况:homeComponent.searchUser.patchValue({[“searchUser”]:[“ste”]}) – AngularM

+0

@AngularM不,语法上没有意义;它将是一个计算出来的属性名称和一个数组值。括号表示占位符,我想。 – jonrsharpe

+0

patchvalue和setvalue在窗体实例上不可用formcontrol forminstance表示使用formbuilder创建或使用新FormGroup创建() –