在运行 Karma 测试我的 Angular4 应用程序时,我收到此错误 Found the synthetic property @enterAnimation. Please include either "BrowserAnimationsModule" or "NoopAnimationsModule" in your application.
,尽管我已经在 app.module.ts 中导入了模块
// animation module
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
...
@NgModule({
imports: [...
BrowserAnimationsModule,
...
],
在我的组件中:
import { Component, OnInit } from '@angular/core';
import {
trigger,
state,
style,
animate,
transition
} from '@angular/animations';
@Component({
selector: 'app-about',
animations: [
trigger(
'enterAnimation', [
transition(':enter', [
style({ transform: 'translateX(100%)', opacity: 0 }),
animate('500ms', style({ transform: 'translateX(0)', opacity: 1 }))
]),
transition(':leave', [
style({ transform: 'translateX(0)', opacity: 1 }),
animate('500ms', style({ transform: 'translateX(100%)', opacity: 0 }))
])
]
),
trigger(
'enterAnimationVetically', [
transition(':enter', [
style({ transform: 'translateY(100%)', opacity: 0 }),
animate('500ms', style({ transform: 'translateY(0)', opacity: 1 }))
]),
transition(':leave', [
style({ transform: 'translateY(0)', opacity: 1 }),
animate('500ms', style({ transform: 'translateY(100%)', opacity: 0 }))
])]
)
],
...
该应用程序在 ng serve
下运行完美,但我收到了这个 karma 错误。
未来的读者:当您忘记放置时,您也可以得到这个确切的错误
animations: [ <yourAnimationMethod()> ]
在您的 @Component
ts 文件上。
也就是说,如果您在 HTML 模板上使用 [@yourAnimationMethod]
,即 angular animations。
我找到了解决方案。我只需要在 app.component.spec.ts
中导入相同的导入
// animation module
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
...
@NgModule({
imports: [...
BrowserAnimationsModule,
...
],
animations: [ <yourAnimationMethod()> ]
放在 @Component 上时,您也会得到这个确切的错误(仅当您在 HTML 模板上使用 [@yourAnimationMethod]
时)
BrowserAnimationsModule
导入到 my-component.spec.ts
后,错误仍然会出现。我最终通过在我的其他组件的每个测试文件中导入 BrowserAnimationsModule
来修复它。似乎同一模块内的所有组件都需要在其测试文件中进行此导入,即使它们本身不使用动画也是如此。
对于我的 Angular 6 应用程序,我通过将以下内容添加到我的组件 .spec.ts 文件中解决了这个问题:
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
然后将 BrowserAnimationsModule
添加到同一组件 .spec.ts 文件中 TestBed.configureTestingModule
的导入中
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ LinkedSitesComponent ], imports: [ BrowserAnimationsModule ],
})
.compileComponents();
}));
对于 Angular 7 和以前的版本,您只需在 app.module.ts
文件中添加这一行,并记住将其放在同一文件中的 imports 数组模块中:
import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
如果您在 Storybook
中遇到此错误,请将此 BrowserAnimationsModule
导入您的故事中的 moduleMetadata
。
像这样,
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
export const Primary = () => ({
template: `
<div style="width: 720px">
<view-list [data]="data"></view-list>
</div>
`,
moduleMetadata: {
imports: [AppModule, BrowserAnimationsModule],
},
props: {
data: SOME_DATA_CONSTANT,
},
});
PS:对于 Angular,上面提到的答案效果很好。
如果您在单元测试期间看到此错误,那么您可以将 NoopAnimationsModule
之类的实用程序模块导入您的规范文件中,该文件模拟真实动画而不实际制作动画
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
如果包含 BrowserAnimationsModule
但仍无法正常工作,则必须像这样将 animations
属性添加到您的 @component
@Component({ selector: 'app-orders', templateUrl: './orders.component.html', styleUrls: ['./orders.component.scss'], 动画: [ trigger('detailExpand', [ state( 'collapsed', style({ height: '0px', minHeight: '0' })), state('expanded', style({ height: '*' })), transition('expanded <=> collapsed', animate('225ms 三次贝塞尔曲线(0.4, 0.0, 0.2, 1)')), ]), ], })
就我而言,我所做的只是将此行添加到我的组件(users-component.ts)
@Component({
animations: [appModuleAnimation()],
})
当然,请确保您已在 app.component.ts 或导入模块的位置导入了相关模块
// animation module
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
@NgModule({
imports: [
BrowserAnimationsModule,
],
})
BrowserAnimationsModule
失败,不一定会出现此错误。