2017-06-17 1 views
0

Ceci est une application simple pour explorer TDD avec moka. L'application recevra deux jeux de mains de poker et définira la main gagnante.valeurs de propriété retournant indéfini après l'instanciation

Je rencontre des problèmes pour déterminer pourquoi ma valeur renvoie undefined après avoir invoqué une fonction sur l'objet. Après l'instanciation, les variables individuelles stockées correctement; mais la variable qui utilise une fonction pour récupérer ces valeurs antérieures les renvoie comme non définies. Je suis nouveau dans le développement de nœuds/web en général, et la seule chose que je pourrais penser c'est que c'est sync/async?

Le code se trouve sur github here

Voici le terminal:

images/undefined/undefined.img 
{"suit":9,"val":1,"img":"images/undefined/undefined.img"} 


    Test card module 
    ✓ card is not null 
    ✓ has all arguments valid and present 
    ✓ has image value property 
    1) has valid image path 

    3 passing (13ms) 
    1 failing 

    1) Test card module has valid image path: 
    AssertionError: expected [Function] to equal 'images/s/1.img' 
     at Context.<anonymous> (test/cardTest.js:35:36) 

et suivant est le fichier de test:

'use strict' 

const app = require('express'), 
     mocha = require('mocha'), 
     chai = require('chai') 

let expect = chai.expect 

let card = require('../app/card.js') 

describe('Test card module',() => { 

    const myCard = new card.card('s', 1) 
    console.log(JSON.stringify(myCard)) 

    it('card is not null',() => { 

    expect(myCard).is.not.null 
    }) 

    it('has all arguments valid and present',() => { 

    expect(myCard).has.property('suit') 
    expect(myCard).has.property('val') 
    }) 


    it('has image value property',() => { 

    expect(myCard).has.property('getCardImage') 
    }) 

    it('has valid image path',() => { 

    expect(myCard.getCardImage).to.equal('images/s/1.img') 
    }) 


}) 

et enfin le fichier app:

'use strict' 

function card(suit, val) { 

    this.suit = suit 
    this.val = val 
    this.img = this.getCardImage() 
} 

card.prototype.getCardImage =() => { 

    console.log('images/' + this.suit + '/' + this.val + '.img') 
    let location = 'images/' + this.suit + '/' + this.val + '.img' 

    return location 
} 

exports.card = card; 

Toute explication serait très appréciée; Je vous remercie!

Répondre

0

Vous devez appeler la fonction

expect(myCard.getCardImage()).to.equal('images/s/1.img') 

Et vous devez utiliser la fonction simple puisque vous avez contexte dynamique this dans ce

card.prototype.getCardImage = function() { 

    console.log('images/' + this.suit + '/' + this.val + '.img') 
    let location = 'images/' + this.suit + '/' + this.val + '.img' 

    return location 
} 
+0

Eh bien la réponse est beaucoup plus simple que ce que j'attendais. J'ai également examiné les fonctions de la flèche et les problèmes qu'elles pouvaient poser avec 'ceci'. Tellement à apprendre, merci! https://derickbailey.com/2015/09/28/do-es6-arrow-functions-really-solve-this-in-javascript/ – gummyguppy