Rae*_*ald 8 jasmine karma-jasmine angular
我对 Angular 的 Karma Jasmine 测试@Component抱怨说
错误:“无法绑定到‘ngIf’,因为它不是‘p’的已知属性。”
当应用程序本身出现此类错误时,修复方法是确保将其添加BrowserModule到应用程序模块 ( )imports: []中。我确实有这个导入(所以这个问题不是关于“无法绑定到 'ngXXX' 因为它不是 'YYY' 的已知属性”的规范问题的重复)。@NgModule()app.module.ts
这是我的测试设置代码:
let component: MyComponent;
let fixture: ComponentFixture<MyComponent>;
beforeEach(async () => {
TestBed.configureTestingModule({
imports: [
BrowserModule
],
providers: [
MyComponent,
{ provide: MyService, useClass: MockMyService }
]
}).compileComponents();
TestBed.inject(MyService);
component = TestBed.inject(MyComponent);
fixture = TestBed.createComponent(MyComponent);
fixture.detectChanges();
});
Run Code Online (Sandbox Code Playgroud)
我的 HTML 模板显示*ngIf,不是ngIf或拼写错误,这是该错误消息的另一个常见原因:
<div class="self">
<p *ngIf="isLoggedIn() else selfLogin">Logged in as
{{getUsername()}}</p>
<ng-template #selfLogin>
<button id="login" (click)="login()">login</button>
</ng-template>
</div>
Run Code Online (Sandbox Code Playgroud)
将测试模块配置和对象注入放在单独的beforeEach调用中(如针对不同的 Angular 测试问题的建议)没有帮助。
我看到您将组件包含在您的TestBed providers. 组件通常是declarations. 所以,像这样:
let fixture: ComponentFixture<MyComponent>;
let component: MyComponent;
beforeEach(waitForAsync(() => {
TestBed.configureTestingModule({
providers: [
{ provide: MyService, useClass: MockMyService }
],
declarations: [
MyComponent
]
}).compileComponents();
}));
beforeEach(() => {
TestBed.inject(MyService);
fixture = TestBed.createComponent(SelfComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
Run Code Online (Sandbox Code Playgroud)
您的声明还存在 HTML 格式问题else:
<div class="self">
<p *ngIf="isLoggedIn() else selfLogin">Logged in as
{{getUsername()}}</p>
<ng-template #selfLogin>
<button id="login" (click)="login()">login</button>
</ng-template>
</div>
Run Code Online (Sandbox Code Playgroud)
应该...
*ngIf="isLoggedIn(); else selfLogin"
| 归档时间: |
|
| 查看次数: |
5534 次 |
| 最近记录: |