2017-04-25 2 views
1

Mocha/Chai를 사용하여 Jest로 반응하는 네이티브 애플리케이션을 전환하려고하는데 문제가 발생합니다.Jest로 ReactNative의 NativeModules.RNDeviceInfo를 설정하십시오.

는 이전에 내 test/setup.js에서 나는의 라인을 따라 뭔가했다 :

TypeError: Cannot read property 'appVersion' of undefined 
    at Object.getVersion (node_modules/react-native-device-info/deviceinfo.js:39:20) 
: 농담이 작동하지 않습니다 그러나

const NativeModules = require('react-native-mock-render').NativeModules; 
const MockRNDeviceInfo = require('./support/mock-device-info.js').MockRNDeviceInfo; 
NativeModules.RNDeviceInfo = MockRNDeviceInfo; 

이를 내 구성 요소 중 하나를 테스트하려고 다음과 같은 오류가로

NativeModules에 값을 설정하는 적절한 방법은 무엇입니까? 그런 당신을 위해 작동하지 않는 한 이후, 나는 단지 getVersion 방법을 조롱하고 임의의 숫자를 반환 한

jest.mock('react-native-device-info',() => { 
    return { 
    getVersion:() => 4 
    } 
}) 

,하지만 당신은해야 할 수도 있습니다 :

+0

이 오류를 재현하는 데 도움이되는 추가 코드가 있습니까? './support/mock-device-info.js'에 무엇이 있습니까? –

답변

2

농담에서 당신은 같은 것을 사용하여 모듈을 조롱 할 수 있습니다 응용 프로그램에서 사용중인 것을 추가하십시오 (그리고 원하는 값으로 변경하십시오).

jest.fn util을 사용하여 모듈의 기능을 조롱 할 수도 있습니다.

+0

각 테스트를 조롱하기보다는'setupFile' 루트가 장기적으로 더 나을 것이라고 생각합니다. 내 대답을 보라. –

+0

OP에 이미 설정 파일이 있습니다. 이미 당신이 무슨 말을하고 있는지 모르겠습니다. –

0

나는 자신에 대한 반응이별로 없지만 나는 친구가있다. 나는 그에게 이것을 말했고 포장기를 다시 시작해야한다고 말했다. 당신은 첫 번째로 수행 할 수

수동으로 시작 터미널 창을

를 종료하여 패키저를 종료 :이 어떻게 든 도움이

나는 희망
$ react-native start 

!

-2

Jest로 이것을 처리하는 가장 쉽고 빠른 방법은 다음과 같습니다. 일단 알아 내면 번거 로움이 없습니다.

setup.js (또는 원하는대로) 모든 글로벌 모의 파일을 포함하는 파일을 만듭니다. 그런 다음 package.json 파일에서, 당신은 너무

"jest": { 
    "preset": "react-native", 
    "setupFiles": [ 
    "./jest/setup.js" <----- Here's your path to your setup file 
    ] 
} 

해당 설치 파일에서 Jest docs here

2에 setupFiles에 대한 자세한 내용을보실 수 있습니다, 모의 유사한이 설정 파일을 포함해야합니다 이 같은 NativeModule : 그 수행

jest.mock('NativeModules',() => { 
    return { 
    RNDeviceInfo: { 
     appVersion: 2.1, 
     buildNumber: 12, 
     model: 'iPhone', 
     systemName: 'iOS', 
     systemVersion: '10.3', 
    }, 
    } 
} 

농담이 테스트의 모든 일에 react-native-device-info 대한 모의에 액세스 할 수 있습니다.

필요에 따라 해당 반환 객체의 다른 NativeModules를 조롱 할 수도 있습니다. 희망이 도움이됩니다.