6

Ich habe eine App für Code-Push konfiguriert, es funktioniert gut, außer für Jest-Tests. Es schlägt fehl, in App für diesen Fehler zu machen:Code Push breaking jest Tests für reaktive native

TypeError: Cannot read property 'CheckFrequency' of undefined 

    at Object.<anonymous> (app/index.js:7:66) 
    at Object.<anonymous> (index.ios.js:5:12) 
    at Object.<anonymous> (__tests__/index.ios.js:4:12) 

in dieser Zeile:

const codePushOptions = { checkFrequency: codePush.CheckFrequency.MANUAL }; 

Der Testcode ist:

import App from '../index.ios'; 

it('renders correctly',() => { 
    const tree = renderer.create(
     <App />, 
); 
}); 
+1

Sie benötigen ein [Mock] (https zu erstellen: //facebook.github .io/jest/docs/manual-mocks.html) für CodePush – Xeijp

+0

codePush varibale ist nicht definiert oder kein json ' –

+0

@assem Chelli haben Sie Ihre Probleme gelöst? Ich laufe in etwas Ähnliches hinein ... –

Antwort

0

Sie ein Mock müssen Sie sich für code-push zu arbeiten, diese Linie CodePush.CheckFrequency.MANUAL wird immer die null produzieren.

1

In Ihren Tests, unter Ihrem import App from '../index.ios';, fügen Sie die folgenden Schritte aus:

jest.mock('react-native-code-push',() => { 
    return jest.fn(() => ({ 
     InstallMode: jest.fn(), 
     CheckFrequency: jest.fn(), 
     CodePushComponent: jest.fn(), 
     codePushify: jest.fn() 
    })); 
}); 
+0

Ich glaube, das wird immer noch zu dem Fehler führen 'TypeError: Kann Eigenschaft 'MANUAL' von undefined nicht lesen ' –

0

Ähnlich wie Tom Hall beschreibt, tut dies mock Arbeit für mich:

jest.mock('react-native-code-push',() => { 
    const cp = (_: any) => (app: any) => app; 
    Object.assign(cp, { 
    InstallMode: {}, 
    CheckFrequency: {}, 
    SyncStatus: {}, 
    UpdateState: {}, 
    DeploymentStatus: {}, 
    DEFAULT_UPDATE_DIALOG: {}, 

    checkForUpdate: jest.fn(), 
    codePushify: jest.fn(), 
    getConfiguration: jest.fn(), 
    getCurrentPackage: jest.fn(), 
    getUpdateMetadata: jest.fn(), 
    log: jest.fn(), 
    notifyAppReady: jest.fn(), 
    notifyApplicationReady: jest.fn(), 
    sync: jest.fn(), 
    }); 
    return cp; 
}); 
+2

Warum das Currying? So geht es nicht. Nach dem Ändern in 'const cp = (app: any) => app;' wird es übergeben. – adam

2

ich auf dieses Problem kam, während die Integration codePush in die React Native App, an der ich gerade arbeite. Was für mich funktionierte war:

  1. Erstellen einer Datei __mocks__/react-native-code-push.js.

Hinzufügen von den folgenden Code hinzu:

const codePush = { 
    InstallMode: {ON_NEXT_RESTART: 'ON_APP_RESTART'}, 
    CheckFrequency: {ON_APP_RESUME: 'ON_APP_RESUME'} 
}; 

const cb = _ => app => app; 
Object.assign(cb, codePush); 
export default cb; 

Auf meiner index.js Datei, die ich habe:

import codePush from 'react-native-code-push'; 
import MyApp from './src/' 

const codePushOptions = { 
    installMode: codePush.InstallMode.ON_NEXT_RESTART, 
    checkFrequency: codePush.CheckFrequency.ON_APP_RESUME 
}; 

export default codePush(codePushOptions)(MyApp); 
Verwandte Themen