Тестирование жасмина не работает с новым экземпляром объекта - PullRequest
0 голосов
/ 05 октября 2018

У меня есть класс SNumber

export class SNumber extends Symbol{
    private _value: number;

    constructor(_value: number){
        super(SymbolType.VARIABLE);
        this._value = _value;
    }

    public add(symbol: Symbol, symbolic?: boolean): Symbol {
        if(symbol instanceof SNumber && !symbolic){
                return new SNumber(this._value + symbol._value);
        }
        return new SExpression(Arrays.toList(this.copy(), symbol));
    }

    public substract(symbol: Symbol, symbolic?: boolean): Symbol {
        if(symbol instanceof SNumber && !symbolic){
            this.add(symbol.negate(), false);
        }
        return new SExpression(Arrays.toList(this.copy(), symbol.negate()));
    }

    public multiply(symbol: Symbol, symbolic?: boolean): Symbol {
        if(symbol instanceof SNumber && !symbolic){
            return new SNumber(this._value*symbol._value);
        }
        return new SMultiplication(this.copy(), symbol);
    }

    public divide(symbol: Symbol, symbolic?: boolean): Symbol {
        if(symbol instanceof SNumber && !symbolic){
            if(symbol._value == 0){
                throw Error("Division by null");
            }
            return new SNumber(this._value / symbol._value);
        }
        return new SFraction(this.copy(), symbol);
    }

    public negate(symbolic?: boolean): Symbol {
        return new SNumber(-1*this._value); 
    }

    public invert(symbolic?: boolean): Symbol {
        if(!symbolic){
            return new SNumber(1/this._value);
        }
        return new SFraction(Constants.ONE, this.copy());
    }

    public copy(): Symbol{
        return new SNumber(this._value);
    }

    public get value(): number{
        return this._value;
    }
}

, и я пытаюсь проверить его методы с помощью простого теста с жасмином.

    import { SNumber } from './SNumber';

    describe('Testing aritmetic methods ', () => {
      let number1:SNumber;
      let number2:SNumber;

      beforeEach(()=>{
        number1 = new SNumber(2);
        number2 = new SNumber(4);
      })

        it('When adding number1 to number2, should return 6', () => {
          var result = number1.add(number2);
          expect(result).toEqual(6);
        });

        it('When substracting number1 from number2, should return 2', () => {
          var result = number1.substract(number2);
          expect(result).toEqual(2)
        });

      });

  

Но по какой-то причине, если мой тест содержит ключевое слово new, это не работает.Карма не пишет никаких ошибок, просто прекратите компиляцию в половине процесса.Не имеет значения, находится ли instatiation (new) в функции beforeEach или где-либо еще.Если я напишу более простой тест, как

    describe('Testing aritmetic methods ', () => {
      let number1
      let number2

      beforeEach(()=>{
        number1 = 2;
        number2 = 4;
      })

        it('When adding number1 to number2, should return 6', () => {
          var result = number1 + number2;
          expect(result).toEqual(6);
        });

        it('When substracting number1 from number2, should return 2', () => {
          var result = number1 - number2;
          expect(result).toEqual(2)
        });

Все работает хорошо.

Спасибо за любой совет.

...