2017-05-01 2 views
2

Modifier: Ma question initiale n'incluait pas .bind dans funcToTest. Cela semble être ce qui échoue le test.jasmine - Comment faire la comparaison d'égalité entre la fonction et la méthode objet assignée avec .bind?

Je suis en train de tester une méthode qui affecte une fonction à la propriété d'un objet.

Je souhaite vérifier que la propriété nouvellement créée est égale à la fonction. Ni toBe ni toEqual n'obtiennent le test.

Quelle est la meilleure pratique dans ce cas?

class TestClass { 
    constructor() { 
    } 

    initMyObj() { 
     this.myObj = { 
      func: this.myFunc.bind(this) //it works fine without .bind 
     } 
    } 

    funcToTest() { 
     console.log('Thanks for reading!'); 
    } 
} 


describe('TestClass', function() { 
    beforeEach(function() { 
     this.test = new TestClass(); 
    }); 
    it('should set "myObj.func" property to funcToTest method', function() { 
     this.test.initMyObj(); 
     expect(this.test.myObj.func).toBe(this.test.funcToTest); //fails with `Expected Function to be Function.` 
     expect(this.test.myObj.func).toEqual(this.test.funcToTest); //fails with `Expected Function to equal Function.` 
    }) 
}) 

Notez également - si je retire .bind(this), cela fonctionne très bien.

Répondre

0

Résolu cela en déplaçant ma déclaration .bind au constructeur.

class TestClass { 
    constructor() { 
     this.myFunc = this.myFunc.bind(this) 
    } 

    initMyObj() { 
     this.myObj = { 
      func: this.myFunc 
     } 
    } 

    funcToTest() { 
     console.log('Thanks for reading!'); 
    } 
}