2017-10-15 13 views
0

j'ai un module « notifications.js » qui ressemble un peu à ceci:En utilisant Jest pour railler les importations nommées

import { Notifications, Permissions } from 'expo' 

export function setLocalNotification(storage = AsyncStorage) { 
    return storage 
    .getItem(NOTIFICATION_KEY) 
    .then(JSON.parse) 
    .then(data => { 
     if (data === null) { 
     return Permissions.askAsync(
      Permissions.NOTIFICATIONS 
     ).then(({ status }) => { 
      if (status === 'granted') { 
      Notifications.cancelAllScheduledNotificationsAsync() 
      ...etc. 

Dans mon test, je veux moquer des autorisations et notifications pour que je puisse faire quelque chose comme ça en notifications.spec.js:

import { setLocalNotification } from './notifications' 
import mockAsyncStorage from '../mock/AsyncStorage' 

it('correctly cancels pending notifications', done => { 
    setLocalNotification(mockAsyncStorage).then(done()) 
    expect(Permissions.askAsync).toBeCalled() 
    expect(Notifications.cancelAllScheduledNotificationsAsync) 
    .toBeCalled() 
}) 

J'ai essayé différentes choses en utilisant jest.mock et jest.setMock mais je ne peux pas sembler obtenir ce travail. Comment puis-je me moquer de ces importations nommées de la manière souhaitée? Par exemple, j'ai essayé ceci:

jest.setMock('Permissions',() => ({ 
    askAsync: jest 
    .fn() 
    .mockImplementationOnce(() => ({ status: 'granted' })) 
})) 

Mais cela ne fonctionne pas. Il jette

'module Permissions cannot be found from notifications.spec.js' 

Et si j'essaie de se moquer de l'ensemble du module d'exposition, les fonctions se moquaient expect().toBeCalled() retourne false.

Répondre

0

Vous avez le module pour se moquer 'expo'

jest.mock('expo',()=>({ 
    Permissions: { 
    askAsync: jest.fn() 
    } 
})) 
+0

j'avais d'abord essayé, mais je pensais que ce ne fonctionnait pas parce que mes tests ont été défaillants. Mais il s'est avéré qu'ils échouaient parce que mon implémentation avait un bug. Donc, c'est effectivement la bonne approche. – BarthesSimpson