What's the difference between BrowserAnimationsModule and NoopAnimationsModule?

As the name noop ("no operation") says, that module doesn't do anything. It is a utility module that mocks the real animation module but doesn't actually animate.

This can be handy on platforms where animation would be too slow, or for testing (unit, integration, e2e with Cypress, Protractor, ...) , if animation isn't involved in what you actually want to test.

@NgModule({
  imports: [
    BrowserModule,
    environment.production ? BrowserAnimationsModule : NoopAnimationsModule,
    ...
   ]
   ...
}
export class AppModule {}

BROWSER_ANIMATIONS_PROVIDERS is used for real application

Separate providers from the actual module so that we can do a local modification in Google3 to include them in the BrowserModule.

BROWSER_NOOP_ANIMATIONS_PROVIDERS is used for testing

Separate providers from the actual module so that we can do a local modification in Google3 to include them in the BrowserTestingModule.