How to Disable jQuery Animations Globally for Testing

Disabling animations in jQuery is a crucial optimization for automated testing environments such as Jest, Cypress, or Selenium. By turning off animations, you prevent timing issues, eliminate flakiness caused by elements transitioning mid-assertion, and significantly speed up test suite execution. This article explains how to disable jQuery animations globally using a single built-in property.

To disable all jQuery animations globally, set the jQuery.fx.off property to true.

jQuery.fx.off = true;
// or using the $ alias:
$.fx.off = true;

How It Works

When jQuery.fx.off is set to true:

  • All animation methods (such as .fadeIn(), .slideDown(), and .animate()) instantly jump to their final CSS styles rather than transitioning over time.
  • Duration parameters passed to animation functions are ignored.
  • Callbacks attached to animations execute synchronously or immediately upon invocation.

Implementation in Testing Frameworks

To ensure animations are consistently turned off across all your tests, place the snippet in your test setup file or a global beforeAll / before hook.

Jest / Mocha Example:

beforeAll(() => {
  if (typeof window !== 'undefined' && window.$) {
    window.$.fx.off = true;
  }
});

Cypress Example:

In Cypress, you can apply this to every page visit using the onBeforeLoad callback or inside cypress/support/e2e.js:

Cypress.on('window:before:load', (win) => {
  win.jQuery.fx.off = true;
});

Re-enabling Animations

If specific integration tests require observing actual animation states, you can re-enable animations for a single test block and disable them again afterward:

beforeEach(() => {
  $.fx.off = false; // Enable for this test
});

afterEach(() => {
  $.fx.off = true; // Re-disable globally
});

Setting $.fx.off = true ensures predictable, deterministic DOM states, drastically reducing false negatives in automated test pipelines.