Skip to main content
Participant
November 16, 2017
Question

Unit Testing Problem - Illustrator Extension in Angular 4

  • November 16, 2017
  • 1 reply
  • 694 views

Hi guys,

I'm building an extension for Illustrator using Angular 4. My extension works ok but the I can't unit test it because the calls to CSInterface explode when the code isn't running inside Illustrator.

By default, the Angular CLI creates the project with Karma and Jasmine and I've created a basic test. Essentially the test spec.ts file blows up when trying to create the component because of the errors in CSInterface. This is understandable since it isn't running inside Illustrator but I can't figure out how to mock out the calls to CS interface.

An abbreviated version of the code looks like:

component file:

// Some imports here

declare var CSInterface: any;

@Component({

    selector: 'app-notes',

    templateUrl: './notes.component.html',

    styleUrls: ['./notes.component.scss']

})

export class NotesComponent implements OnInit {

    const csInterface = new CSInterface();

    ngOnInit() {

        // do some other stuff, then

        this.csInterface.evalScript("myScript()");

    }

}

export class NotesComponent implements OnInit {

test file:

  beforeEach(async(() => {

   TestBed.configureTestingModule({

   imports: [

   FormsModule

  ],

   providers: [

   NotesComponent,

  {

   provide: SocketService, useClass: MockSocketService

  },

  {

   provide: ExtensionStateService, useClass: MockExtensionStateService

  }

  ],

  });

  }));


  beforeEach(

   inject([NotesComponent], (_notesComponent: NotesComponent) => {

   component = _notesComponent;

  })

  );


  it('basic test 2', () => {

   expect(2 + 2).toBe(4);

  });

Anyway, that is the basics. Essentially, I need to find a way to mock out the CSInterface so that it will allow the tests to run.

If it matters, the failure is on CSInterface line 480, where it does:

CSInterface.prototype.hostEnvironment = JSON.parse(window.__adobe_cep__.getHostEnvironment());   

It fails because __adobe_cep__ is undefined when running outside the CC environment.

Anyone else doing an angular project and have the included test suite working?

Thanks!

Marshall

This topic has been closed for replies.

1 reply

tardigrade01
Inspiring
November 17, 2017

I haven't been able to integrate my ExtendScript test with my other tests, but I have created separate sets of tests using Karma and Istanbul for the AngularJS unit testing, Protractor for the e2e testing, and this:

GitHub - tmaslen/jasminejsx: A port of Jasmine 2.2.0 that is compatible with Adobe ExtendScript

for the  Extendscript testing. Not  really an answer but maybe you can find a way to get jasminejsx to play along with your other tests.