Skip to content

[BUG] Fatal error trigger when testing a component that have a class.bind #110

@Baben01

Description

@Baben01

I'm submitting a bug report

  • Library Version:
    1.1.0

Please tell us about your environment:

  • Operating System:
    Windows 11

  • Node Version:
    16.X

  • NPM Version:
    6.14.18

  • JSPM OR Webpack AND Version
    webpack 5.74.X

  • Browser:
    all

  • Language:
    TypeScript 4.3.5

Current behavior:
Hello,
I'm trying to test a basic component using jest but when I try to build a component that have a class.bind attribute in the template a fatal error appear :

   The class property of a object ([object HTMLDivElement]) cannot be assigned.

      at PrimitiveObserver.setValue (node_modules/aurelia-binding/dist/commonjs/aurelia-binding.js:3761:11)
      at Binding.updateTarget (node_modules/aurelia-binding/dist/commonjs/aurelia-binding.js:4995:25)
      at Binding.bind (node_modules/aurelia-binding/dist/commonjs/aurelia-binding.js:5053:12)
      at View.Object.<anonymous>.View.bind (node_modules/aurelia-templating/src/view.ts:205:19)
      at Controller.Object.<anonymous>.Controller.bind (node_modules/aurelia-templating/src/controller.ts:174:17)
      at View.Object.<anonymous>.View.bind (node_modules/aurelia-templating/src/view.ts:215:22)
      at TemplatingEngine.Object.<anonymous>.TemplatingEngine.enhance (node_modules/aurelia-templating/src/templating-engine.ts:111:10)
      at node_modules/aurelia-framework/src/aurelia.ts:122:26
      at Aurelia.Object.<anonymous>.Aurelia.enhance (node_modules/aurelia-framework/src/aurelia.ts:120:12)
      at node_modules/aurelia-testing/src/component-tester.ts:74:26

My component (TS) :

import {bindable} from 'aurelia-framework';
  
export class MyComponent {
  @bindable firstName: string;
  @bindable customClass: string;
}

My component template (HTML)

<template>
    <div class.bind="customClass">
        <div class="firstName">${firstName}</div>
    </div>
</template>

The component test :

import {ComponentTester, StageComponent} from 'aurelia-testing';
import {bootstrap} from 'aurelia-bootstrapper';
import { PLATFORM } from 'aurelia-pal';

describe('MyComponent', () => {
 let component: ComponentTester;
 beforeEach(() => {
   component = StageComponent
     .withResources(PLATFORM.moduleName('../../../src/components/my-component'))
     .inView('<my-component first-name.bind="firstName" custom-class.bind="customClass"></my-component>')
     .boundTo({ firstName: "Bob", customClass: "CustomClass"})
 });

 it('should render first name', async () => {
   await component.create(bootstrap)
   const nameElement = document.querySelector('.CustomClass');
   expect(nameElement?.innerHTML).toBe('Bob');
 });

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

Expected/desired behavior:

As class.bind work for aurelia it should work also for testing.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions