找到合成属性@enterAnimation.请在您的应用程序中包含"BrowserAnimationsModule"或"NoopAnimationsModule".Angular4

Mel*_*hia 43 javascript testing typescript karma-jasmine angular

当运行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,
        ...
      ],
Run Code Online (Sandbox Code Playgroud)

在我的组件中:

 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 }))
            ])]
        )
      ],
...
Run Code Online (Sandbox Code Playgroud)

该应用程序运行完美ng serve但我得到了业力的这个错误.

Sta*_*avm 55

未来的读者:当你忘记放置时,你也可以得到这个确切的错误

animations: [ <yourAnimationMethod()> ]
Run Code Online (Sandbox Code Playgroud)

在你的@Componentts文件上.

那就是你[@yourAnimationMethod]在HTML模板上使用.

  • 究竟.由于无法导入`BrowserAnimationsModule`,因此不一定浮出此错误. (9认同)
  • 我将动画错误地导入了要制作动画的组件,我需要在保存路由器插座的组件上导入动画。感谢@stavm-这是一个误导性错误,因为我已经导入了Animations模块 (2认同)

Mel*_*hia 44

我找到了解决方案.我只需要导入app.component.spec.ts相同的导入

 // animation module
        import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; 
    ...
@NgModule({
    imports: [...
        BrowserAnimationsModule,
        ...
      ],
Run Code Online (Sandbox Code Playgroud)

  • 未来的读者,当你忘记在@Component上放置`动画:[<yourAnimationMethod()>]时,你也可以得到这个确切的错误(只有你在HTML模板上使用`[@yourAnimationMethod]`) (10认同)
  • 我正在尝试解决这个问题,但这个解决方案对我不起作用。我在哪里放置@NgModule 代码在文件中?在进口之后? (2认同)
  • @Stavm谢谢,这解决了我的问题,你应该把它作为一个不同的答案添加到其他有相同问题的人看来. (2认同)
  • 将“BrowserAnimationsModule”导入“my-component.spec.ts”后,错误仍然会出现。我最终通过在其他组件的每个测试文件中导入“BrowserAnimationsModule”来修复它。似乎同一模块内的所有组件都需要在其测试文件中进行此导入,即使它们本身不使用动画。 (2认同)
  • 在我的原因中,它说浏览器模块已经导入,所以我在我的应用程序组件中升了一级,并在其中添加了浏览器动画模块并且它可以工作。 (2认同)

小智 12

对于我的Angular 6应用程序,我通过将以下内容添加到我的组件.spec.ts文件中解决了该问题:

import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
Run Code Online (Sandbox Code Playgroud)

然后将。添加BrowserAnimationsModuleTestBed.configureTestingModule同一组件.spec.ts文件中的导入中。

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [ LinkedSitesComponent ], imports: [ BrowserAnimationsModule ],
    })
    .compileComponents();
  }));
Run Code Online (Sandbox Code Playgroud)


小智 8

对于angular 7和以前的版本,您只需要在app.module.ts文件中添加此行,并记住将其也放在导入数组模块的同一文件中:

import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
Run Code Online (Sandbox Code Playgroud)


小智 6

如果您在单元测试期间看到此错误,那么您可以将实用程序模块导入NoopAnimationsModule您的规范文件中,该文件会模拟真实的动画,但实际上不会产生动画

import { NoopAnimationsModule } from '@angular/platform-browser/animations';


sab*_*ant 6

如果您在 中遇到此错误Storybook,请务必将其导入BrowserAnimationsModulemoduleMetadata您的故事中。
像这样,

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,
  },
});
Run Code Online (Sandbox Code Playgroud)

PS:对于Angular,上面提到的答案效果很好。