2017-09-12 1 views
0

Cela me rend fou. Toute aide serait appréciée. La situation:Fonction JavaScript; travaille localement mais pas pour Lambda Minibootcamp

Un objet déjà existant, storeItem possède deux propriétés pertinentes, price et discountPercentage. Je dois écrire une fonction (de l'extérieur de l'objet), appelée addCalculateDiscountPrice, qui ajoute une méthode, appelée calculateDiscountPrice à storeItem qui renvoie le prix réduit.

Voici le code:

function addCalculateDiscountPriceMethod(storeItem) { 
    // add a method to the storeItem object called 'calculateDiscountPrice' 
    // this method should multiply the storeItem's 'price' and 'discountPercentage' to get the discount 
    // the method then subtracts the discount from the price and returns the discounted price 
    // example: 
    // price -> 20 
    // discountPercentage -> .2 
    // discountPrice = 20 - (20 * .2) 
    storeItem.calculateDiscountPrice = function() { 
    var discount = this.discountPercentage; 
    var saved = this.price * discount; 
    var finalPrice = this.price - saved; 
    return finalPrice; 
    }; 
} 

Cela fait partie du JavaScript Lambda Mini Bootcamp, qui m'a installe NPM l'intérieur de chaque répertoire d'affectation après clonage avec git. Lorsque j'exécute ce même code (avec l'objet déjà existant, bien sûr) en utilisant jsnode dans un terminal, j'obtiens la sortie attendue de 16 en utilisant les exemples de variables dans les commentaires. Cependant, quand je lance NPM test, je reçois les erreurs suivantes:

FAIL tests/test.js 
    ● addCalculateDiscountPriceMethod(storeItem) › should add the method 'calculateDiscountPrice' to the store item object 

    TypeError: Cannot read property 'calculateDiscountPrice' of undefined 

    at Object.<anonymous> (tests/test.js:209:64) 

    ● addCalculateDiscountPriceMethod(storeItem) › should return the discount price from the new 'calculateDiscountPrice' method 

J'ai réécrites ce code plusieurs fois en essayant de faire passer cette épreuve de NPM. J'ai essayé d'utiliser la notation de parenthèse aussi bien que de renvoyer le calcul évidemment simple sur une seule ligne (prix de retour - (price * discountPercentage)), et, en plus de la tentative originale, ces deux tentatives ont fonctionné session nodejs. Alors, pourquoi ça ne marche pas pour le test NPM? Qu'est-ce que je ne vois pas?

Mise à jour: Voici le code de test pertinent à partir du fichier de test NPM:

describe('addCalculateDiscountPriceMethod(storeItem)', function() { 
    var storeItem = { 
    price: 80, 
    discountPercentage: 0.1 
    }; 
    var storeItem2 = { 
    price: 5, 
    discountPercentage: 0.5 
    }; 

    it('should add the method \'calculateDiscountPrice\' to the store item object', function() { 
    expect(exercises.addCalculateDiscountPriceMethod(storeItem).calculateDiscountPrice).toBeDefined(); 
expect(exercises.addCalculateDiscountPriceMethod(storeItem2).calculateDiscount Price).toBeDefined(); 
    }); 
    it('should return the discount price from the new \'calculateDiscountPrice\' method', function() { 
expect(exercises.addCalculateDiscountPriceMethod(storeItem).calculateDiscountPrice()).toBe(72); 
expect(exercises.addCalculateDiscountPriceMethod(storeItem2).calculateDiscountPrice()).toBe(2.5); 
    }); 
}); 

Répondre

1

La sortie est déjà vous dire que storeItem est non défini, car il est l'argument de la fonction et vous ne faites rien avec elle avant essayer d'ajouter la fonction alors le problème doit être avec le test lui-même.

Examinez le fichier de test et vérifiez si des arguments sont passés à votre fonction. Ou utilisez

console.log(arguments); 

À l'intérieur de la fonction, arguments est un mot réservé qui contient les paramètres transmis à l'appel de fonction.

Edit: en regardant le test, il est deux appels chaînage ce

addCalculateDiscountPriceMethod(storeItem) 
    .calculateDiscountPrice() 

Puisque vous n'êtes pas tout retournerez qu'il appelle calculateDisconutPrice sur undefined donc vous devez retourner dans storeItem addCalculateDiscountPriceMethod.

+0

Isidro veuillez vérifier le code de test ci-dessus. –

+1

Modifier avec la solution! –

+0

Insidro Je comprends votre explication mais qu'écririez-vous exactement pour résoudre ce problème? –