代码之家  ›  专栏  ›  技术社区  ›  bulbasurmsr

与Jasmine和Karma有角度的单元测试,错误:无法绑定到“xxx”,因为它不是“xxxxxx”的已知属性。

  •  51
  • bulbasurmsr  · 技术社区  · 8 年前

    我对angular 5中的Jasmine和Karma单元测试有问题。

    错误是:“无法绑定到‘fruits’,因为它不是‘my-component2’的已知属性”。

    单元测试代码为:

    src/app/components/my-component1/my-component1。组成部分规格ts:

    import { TestBed, inject, ComponentFixture, async} from '@angular/core/testing';
    import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing';
    
    import { Post } from '../../models/post.model';
    
    import { MyComponent1Component } from './my-component1.component';
    import { MyService1Service } from '../../services/my-service1.service';
    
    import { HttpClientModule, HttpClient,HttpHandler } from '@angular/common/http';
    import {fruit} from '../../Models/fruit';
    
    
    fdescribe('MyComponent1Component', () => {
      let component: MyComponent1Component;
      let fixture: ComponentFixture<MyComponent1Component>;
    
      beforeEach(async(() => {
        TestBed.configureTestingModule({
          declarations: [ MyComponent1Component ],
          imports: [],
          providers: [MyService1Service, HttpClient, HttpHandler, HttpTestingController]
        })
    
        .compileComponents();
      }));
    
      beforeEach(async(() => {
        fixture = TestBed.createComponent(MyComponent1Component);
        component = fixture.componentInstance;
        fixture.detectChanges();
      }));
    
      it('should create', () => {
        expect(component).toBeTruthy();
      });
    });

    以下是我的组件代码:

    src/app/components/my-component1/my-component1。组成部分ts:

    import { Component, OnInit } from '@angular/core';
    import { MyService1Service} from '../../services/my-service1.service';
    import {fruit} from '../../Models/fruit';
    
    @Component({
      selector: 'my-component1',
      templateUrl: './my-component1.component.html',
      styleUrls: ['./my-component1.component.css']
    })
    export class MyComponent1Component implements OnInit {
    
      constructor(private _MyService1Service: MyService1Service) { }
    
      public fruit= new fruit();
    
      public fruits: fruit[];
      ngOnInit() {
        this._MyService1Service.getPost().subscribe(
            result => {
                  console.log(result);
            },
            error => {
              console.log(<any>error);
            }
          );
    
        this.fruit.name = 'apple';
        this.fruits.push(this.fruit);
      }
    }

    src/app/components/my-component1/my-component1。组成部分html:

     <p>
          my-component1 works!
        </p>
    
        <my-component2 [fruits]=fruits></my-component2>

    src/app/components/my-component2/my-component2。组成部分ts:

    import { Component, OnInit, Input } from '@angular/core';
    import {fruit} from '../../Models/fruit';
    
    @Component({
      selector: 'my-component2',
      templateUrl: './my-component2.component.html',
      styleUrls: ['./my-component2.component.css']
    })
    export class MyComponent2Component implements OnInit {
    
      @Input() fruits: fruit[];
    
      constructor() { }
    
      ngOnInit() {
      }
    
    }

    src/app/components/my-component2/my-component2。组成部分html:

    <p>
      my-component2 works!
    </p>

    这是一个虚拟项目,有人能帮我吗?

    谢谢:)

    2 回复  |  直到 8 年前
        1
  •  61
  •   nicowernli    8 年前

    您需要在创建测试模块时添加第二个组件,因为该模块是组件1的一部分。如果没有,模块将没有my-component2,输入将无效。

    TestBed.configureTestingModule({
          declarations: [ MyComponent1Component, MyComponent2Component ],
          imports: [],
          providers: [MyService1Service, HttpClient, HttpHandler, HttpTestingController]
        })
    
        2
  •  8
  •   Ajay Reddy    6 年前

    对于一些人来说,这可能会有所帮助-有时可能只是缺少特定的模块

    TestBed.configureTestingModule(
    {
    declarations: [TestComponent],
    imports: [<Specific_module>],
    }
    
    
    推荐文章