allenhwkim / ngentest

Angular6+ Unit Test Generator For Components, Directive, Services, and Pipes
https://ngentest.github.io
MIT License
144 stars 60 forks source link

Generating mock fails #36

Closed teosbb closed 9 months ago

teosbb commented 4 years ago
Invalid function argument expression Node {
  type: 'AssignmentExpression',
  start: 18,
  end: 45,
  operator: '=',
  left:
   Node {
     type: 'MemberExpression',
     start: 18,
     end: 37,
     object: Node { type: 'ThisExpression', start: 18, end: 22 },
     property:
      Node { type: 'Identifier', start: 23, end: 37, name: 'componentError' },
     computed: false },
  right:
   Node { type: 'Identifier', start: 40, end: 45, name: 'error' } }
Error: Invalid function argument type, AssignmentExpression
    at node.arguments.map.arg (c:\devsbb\eaio\nodejs\node_modules\ngentest\src\util.js:266:15)
    at Array.map (<anonymous>)
    at Function.getFuncArgNames (c:\devsbb\eaio\nodejs\node_modules\ngentest\src\util.js:242:37)
    at Function.getExprMembers (c:\devsbb\eaio\nodejs\node_modules\ngentest\src\util.js:213:44)
    at Function.getObjectFromExpression (c:\devsbb\eaio\nodejs\node_modules\ngentest\src\util.js:290:30)
    at FuncTestGen.setPropsOrParams (c:\devsbb\eaio\nodejs\node_modules\ngentest\src\func-test-gen.js:241:18)
    at FuncTestGen.setMockData (c:\devsbb\eaio\nodejs\node_modules\ngentest\src\func-test-gen.js:159:12)
    at FuncTestGen.setMockData (c:\devsbb\eaio\nodejs\node_modules\ngentest\src\func-test-gen.js:72:12)
    at FuncTestGen.setMockData (c:\devsbb\eaio\nodejs\node_modules\ngentest\src\func-test-gen.js:152:14)
`

Original code:
`
export class EntitiesListComponent implements OnDestroy {
  entities = this.entityService.Entities;
  componentError: string;

  private componentDestoryed = new Subject();
  private setComponentError = (error: string) => throwError(this.componentError = error);

  constructor(
    private entityService: EntityService,
    private navbarService: NavbarService
  ) {
    this.navbarService.navbarSubtitle.next('Title');
    this.initializeErrors();
  }
`

probably parser issue with:
  private setComponentError = (error: string) => throwError(this.componentError = error);
allenhwkim commented 3 years ago

This is a special case. It can't be fixed sooner. PR would appreciated.

allenhwkim commented 9 months ago

This is working code.

import { Component, OnDestroy } from '@angular/core';
import { EntityService } from './entity-service';
import { NavbarService } from './navbar-service';

@Component({template: ''})
export class EntitiesListComponent implements OnDestroy {
  entities = this.entityService.Entities;
  componentError: string;

  private componentDestoryed = new Subject();
  private setComponentError = (error: string) => {
    // throwError(this.componentError = error);
    this.componentError = error;
    throw error;
  }

  constructor(
    private entityService: EntityService,
    private navbarService: NavbarService
  ) {
    this.navbarService.navbarSubtitle.next('Title');
    this.initializeErrors();
  }
}