2017-11-15 1 views
0

Ich mache Unit Testing für meine react Komponente (mit jest). Ich habe wenige Methoden, die von der Komponente aufgerufen werden. Beispiel:wie man react-intl als Argument in der react component Methode übergibt während jest testing, throws 'TypeError: intl.formatMessage ist keine Funktion'

export function getText(text, intl) => ((text !== 'NA') ? (intl.formatMessage({ id: value })) : ''); 

    const ReactComponent = (props) => { 
     const text = getText(text, intl); 

     return (....); 
    } 

    export default injectIntl(ReactComponent); 

in Testdatei i haben:

import { getText } from 'path'; 
    import { intl } from 'react-intl'; 

    it('should render text',() => { 
     expect(getText('string', { intl })).toBe('string'); 
    }); 

Wenn ich versuche, Test auszuführen, es wirft Fehler intl.formatMessage keine Funktion ist.

+0

Über 'wirft Fehler reactcomponent.getText ist nicht eine Funktion'. Wie importierst du diese Methode in deinem Test? – mersocarlin

+0

Importieren Sie {getText} von 'Pfad'; – user8870784

+0

Das ist der Grund dann. Sie exportieren 'getText' nicht. Ich habe gerade meine Antwort aktualisiert :) – mersocarlin

Antwort

0

Ihre Methode getText erfordert 2 Argumente (text und intl).

const getText = (text, intl) => ((text !== 'NA') ? (intl.formatMessage({ id: value })) : '') 

ist die gleiche wie:

const getText = (text, intl) => { 
    if (text !== 'NA') { 
    return intl.formatMessage({ id: value }) 
    } 

    return '' 
} 

Sie sind zur Zeit Ihre Testmethode mit getText('string') aufrufen. Folglich text (erstes Argument) ist anders als NA und getText wird zurück intl.formatMessage(...). Da Sie intl nicht zur Verfügung gestellt haben, wird Ihre Methode irgendwann kaputt gehen. Deshalb haben Sie it throws another error 'formatMessage is not a function' Nachricht erhalten.

Stellen Sie beim Testen sicher, dass Sie exportierengetText, so dass Sie es verwenden können.

Statt

const getText = (...)

Verwendung:

export const getText = (...)

so ist, dann können Sie es als verwenden können:

import { getText } from 'path/to/gettext'

+0

Ich übermittle Intl zu GetText im Test, es wirft intl.formatMessage ist keine Funktion. – user8870784

+0

@ user8870784 Wie übergeben Sie es? Ihr Beispiel scheint es nicht zu senden. – mersocarlin

Verwandte Themen