2017-09-06 18 views
-1

ユニットテストでsearchUserというFormControlフィールドの値を設定できません。角度4ユニットテストの問題 - フォームを設定したいFormControlフィールドの値

以下のコードでは、 "this.searchUser.value"はフォームコントロールです。 は、だから私は、このように私はそれを設定したがdidntの仕事ができなかった私のテストで:

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; 
    } 

これは私です:

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

これは私が(mapUsers)をテストしていますコンポーネントメソッドであります完全なユニットテスト仕様:私は取得

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); 
    })); 

}); 

カルマエラー:失敗

:あなたは直接form.Youの値を設定することはできませんだけ ゲッター

+0

の可能性のある重複した[Angualr2エラー:#のプロパティ値を設定することはできませんだけでゲッター持っている](https://stackoverflow.com/questions/38810174/angualr2-error-cannot-set-propertyを-value-of-abstractcontrol-which-has -only) – jonrsharpe

答えて

-1

はこのようpatchValueかのsetValueメソッドのいずれかを使用する必要がありました[オブジェクトのオブジェクト]のプロパティ値を設定できません

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

私の場合、homeComponent.searchUser.patchValue({["searchUser"]:["ste"]})のようになりますか? – AngularM

+0

@AngularMいいえ、構文的には意味がありません。これは、計算されたプロパティ名と配列値になります。角括弧はプレースホルダーを示すものです。 – jonrsharpe

+0

patchvalueとsetvalueはformcontrolではないフォームインスタンスで利用可能 forminstanceはformbuilderまたはnew FormGroup()を使用して作成されます –

関連する問題