2017-11-24 2 views
1

undefined Ich habe die folgende JavaScript-Funktion, die Teil eines größeren Skript ist:Javascript-Funktion zurückkehr statt Nummer

const sub = 'L'; 

export function getFeedData (sub) { 
    var feedId; 
    switch (sub) { 
     case '1': case '2': case '3': case '4': case '5': case '6': case 'S': 
      feedId = 1; 
      break; 
     case 'A': case 'C': case 'E': 
      feedId = 26; 
      break; 
     case 'N': case 'Q': case 'R': case 'W': 
      feedId = 16; 
      break; 
     case 'B': case 'D': case 'F': case 'M': 
      feedId = 21; 
      break; 
     case 'L': 
      feedId = 2; 
      break; 
     case 'G': 
      feedId = 31; 
      break; 
    } 
    if (feedId === 2) { 
     var feed = require('./MockData'); 
    } 
    return { 
     feed: feed, 
     feedId: feedId 
    }; 
} 

ich jede andere Funktion in diesem Skript getestet haben, und sie arbeiten richtig. Für diese Funktion, hier ist mein Test (ich benutze Jest, weil dies Teil einer größeren React App ist).

import React from 'react'; 
import {getFeedData} from '../mocks/apiMock'; 

it('returns 2 as the feedId when L is sub parameter for getFeedData',() => { 
    expect(getFeedData.feedId).toBe(2); 
}); 

it('outputs feed from getFeedData',() => { 
    expect(getFeedData.feed).toBeDefined; 
}); 

Letzteres dieser Tests ist vorbei - nicht sicher, warum passiert das ist.

Die erste ist, worüber ich mehr besorgt bin. Es wird undefined als getFeedData.feedId zurückgegeben und daher fehlgeschlagen. Ich bin Autodidakt mit JavaScript, und ich bin mir sicher, dass ich einen dummen Fehler in dieser Funktion mache, und deshalb ist getFeedData.feedId nicht definiert. Wenn jemand diesen dummen Fehler aufzeigen könnte, würde ich es sehr schätzen.

Antwort

1

Die Tests rufen nicht die Funktion auf, sondern versuchen, auf die Eigenschaft feedId des Funktionsobjekts zuzugreifen.

Der zweite Test besteht, denn in der Tat getFeedData.feed ist undefined. Aber das bedeutet nicht, dass dieser Testfall korrekt ist. Die Absicht ist wahrscheinlich, die Funktion mit einem Parameter, der keine Zuordnung im Schalter hat, aufzurufen und dann zu überprüfen, dass ihr Wert nicht definiert ist.

it('returns 2 as the feedId when L is sub parameter for getFeedData',() => { 
    expect(getFeedData("L").feedId).toBe(2); 
}); 

it('outputs feed from getFeedData',() => { 
    expect(getFeedData("?").feed).toBeDefined; 
}); 
+0

Das korrigiert meine Testergebnisse, danke für die Erklärung. Leider bin ich mir jetzt nicht sicher, warum das gesamte Skript eine unerwartete Ausgabe hat. Ich denke, ich muss meine Scopes und Schließungen ein wenig üben. Aber das ist eine Frage für eine andere Zeit. – bkula

Verwandte Themen