For the complete documentation index, see llms.txt. This page is also available as Markdown.

Testing Custom Attributes

Custom attributes in Aurelia are powerful ways to extend HTML elements with additional behavior. Testing these attributes requires a systematic approach to verify their functionality, binding, and interactions.

Basic Custom Attribute Test Structure

Simple Attribute Implementation

export class HighlightAttribute {
  static inject = [Element];

  constructor(element) {
    this.element = element;
  }

  valueChanged(newValue) {
    this.element.style.backgroundColor = newValue;
  }
}

Comprehensive Attribute Testing

import {StageComponent} from 'aurelia-testing';
import {bootstrap} from 'aurelia-bootstrapper';

describe('Highlight Attribute', () => {
  let component;

  beforeEach(() => {
    component = StageComponent
      .withResources(PLATFORM.moduleName('highlight'))
      .inView('<div highlight.bind="color">Test Content</div>')
      .boundTo({ color: 'yellow' });
  });

  it('should apply background color', done => {
    component.create(bootstrap).then(() => {
      const element = component.element;
      expect(element.style.backgroundColor).toBe('yellow');
      done();
    }).catch(done.fail);
  });

  afterEach(() => {
    component.dispose();
  });
});

Advanced Attribute Testing Scenarios

Dynamic Attribute Behavior

Attribute with Multiple Parameters

Lifecycle and Interaction Testing

Attribute Lifecycle Methods

Testing Strategies and Best Practices

  • Test initial attribute application

  • Verify dynamic updates

  • Check lifecycle method invocations

  • Test edge cases and different input types

  • Ensure proper cleanup and disposal

  • Mock external dependencies

  • Use meaningful assertions

Common Pitfalls to Avoid

  • Don't test implementation details

  • Avoid over-complex test scenarios

  • Ensure proper async handling

  • Clean up DOM between tests

  • Be cautious of timing-related tests

  • Use meaningful and descriptive test names

Last updated

Was this helpful?