当前位置: 首页 > 知识库问答 >
问题:

ngModel、自定义管道和modal的单元测试错误[重复]

宗政坚白
2023-03-14

试图测试我的Angular应用程序,但当试图创建我的组件时,我得到了多个错误。

  1. 无法绑定到“ngModel”,因为它不是“input”的已知属性

类似错误的答案对我帮助不大。

仪表板规格ts

import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { Router } from "@angular/router";
import { MockAF } from "../../providers/mockAf";
import { AF } from "../../providers/af";
import { DashboardComponent } from './dashboard.component';

describe('DashboardComponent', () => {
  let component: DashboardComponent;
  let fixture: ComponentFixture<DashboardComponent>;
  let routerStub;

  beforeEach(async(() => {
    routerStub = {
      navigate: jasmine.createSpy('navigate')
    };
    TestBed.configureTestingModule({
      declarations: [ DashboardComponent ],
      providers: [
        { provide: AF, useClass: MockAF },
        { provide: Router, useValue: routerStub },
      ],
    })
    .compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(DashboardComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
 });

  it('should create', () => {
    expect(component).toBeTruthy();
  });
});

来自HTMLfile的片段:

dashboard.component.html

<figure class="highlight">
   <input type="textarea" class="message-text" [(ngModel)]="newMessage"
   (keyup.enter)="sendMessage()">
   <a class="send-message" (click)="sendMessage()">SEND</a>
</figure>


<a *ngIf="isMe(message.email)" type='edit' class='edit-text' style="cursor: 
    pointer;" (click)="show(message.$key, message.message)">Edit</a>
<!-- Modal (popup) for editing messages belonging to you -->
<app-edit-message-modal>
// modal form 
</app-edit-message-modal>


<div *ngFor="let message of afService.messages | async | 
    sortOnLike:'votes':false">

dashboard.component.ts片段

import { Component, OnInit, AfterViewChecked, ElementRef, ViewChild } from 
  '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { AF } from '../../providers/af';
import { FirebaseListObservable, AngularFire } from 'angularfire2';
import { Bubble } from './bubble';
import { EditMessageModalComponent } from '../edit-message-modal/edit-
   message-modal.component';

show(key: string, message: string): void {
  this.modalMessage = message;
  this.modalMessageKey = key;
  this.modal.show();
}

hide(): void {
  this.modalMessage = null;
  this.modalMessageKey = null;
  this.modal.hide();

}

应用程序。单元ts

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { RouterModule, Routes }   from '@angular/router';
import { AngularFireModule } from 'angularfire2';
import { AppComponent } from './app.component';
import { RegistrationPageComponent } from './registration-page/registration-
  page.component';
import { LoginPageComponent } from './login-page/login-page.component';
import { DashboardComponent } from './dashboard/dashboard.component';
import { AF } from '../providers/af';
import { FrontscreenComponent } from './frontscreen/frontscreen.component';
import { StudentDashboardComponent } from './student-dashboard/student-
  dashboard.component';
import { LecturerDashboardComponent } from './lecturer-dashboard/lecturer-
  dashboard.component';
import { firebaseConfig } from './config';
import { EditCourseModalComponent } from './edit-course-modal/edit-course-
  modal.component';
import { EditMessageModalComponent } from './edit-message-modal/edit-
  message-modal.component';
import { SortOnLikePipe } from './sort-on-like.pipe'

@NgModule({
declarations: [
  AppComponent,
  RegistrationPageComponent,
  LoginPageComponent,
  DashboardComponent,
  FrontscreenComponent,
  StudentDashboardComponent,
  LecturerDashboardComponent,
  EditCourseModalComponent,
  EditMessageModalComponent,
],
imports: [
  BrowserModule,
  FormsModule,
  HttpModule,
  AngularFireModule.initializeApp(firebaseConfig),
  RouterModule.forRoot(routes),
  SortOnLikePipe
],
providers: [AF],
bootstrap: [AppComponent],

})
export class AppModule { }

共有1个答案

唐健
2023-03-14

在测试中,在每个块之前的内。您需要将以下内容添加到TestBed。配置测试模块

  1. 所有使用的管道,组件和指令必须声明.在您的情况下:SortOnLikePipeEditMessageModalComponent
  2. 所有使用的模块都必须被导入.在你的情况下:FormsMoules
  3. 必须提供所有需要的服务

以下是你错过的那些:我想你可能错过更多。。

TestBed.configureTestingModule({
      declarations: [ DashboardComponent, SortOnLikePipe, EditMessageModalComponent  ],
      imports:[FormsModule]
      providers: [
        { provide: AF, useClass: MockAF },
        { provide: Router, useValue: routerStub },
      ],
    })

 类似资料:
  • 我正在尝试测试Angular 2中的双向绑定功能。我还阅读了一些其他答案,但我仍然无法通过测试。 更新输入字段时,我想运行一个测试,以确保 AppComponent 类上的 searchQuery 属性与输入字段的值相同。 如前所述,我已经阅读了其他一些答案,并且随着我的学习,还包括了其他代码段。那么目前可能不需要的是什么? 成分 单元测试 如果有更好的方法,我当然很乐意得到任何反馈。

  • 问题内容: 我在尝试为Angular-Bootstrap编写茉莉花单元测试时遇到问题 。确切的错误是 `Expected spy open to have been called with [ { templateUrl : ‘/n/views/consent.html’, controller : ‘W2ConsentModal as w2modal’, resolve : { employee

  • 使装饰器包含具有name属性的管道元数据。 此值将用于在模板表达式中调用此管道。 它必须是有效的JavaScript标识符。 实现PipeTransform接口的transform方法。 此方法接受管道的值和任何类型的可变数量的参数,并返回一个变换的(“管道”)值。 import { Component } from '@angular/core'; selector: 'app-root',

  • 我想找到一种方法对我的定制nginx模块进行单元测试,但失败了。有人能提供一些建议吗?我曾经找到过Test::Nginx框架,但它可以作为系统测试。有人告诉我,我可以使用ngx_lua_模块通过FFI的方式在nginx模块中公开C函数。有人知道怎么做吗?

  • 获取频道自定义菜单 删除频道自定义菜单 设置频道自定义菜单

  • 问题内容: 我正在为启动a 并使用返回的诺言执行一些逻辑的控制器编写单元测试。我可以测试触发$ modal的父控制器,但是我一生无法弄清楚如何模拟成功的诺言。 我尝试了多种方法,包括使用和强制履行承诺。但是,我得到的最接近的结果是与本 SO帖子中的最后一个答案相似的东西。 我已经在“旧的” 模式中看到了几次这样的问题。在“新” 模式下,我找不到太多的方法。 一些指针将不胜感激。 为了说明问题,我使