0
我有一個「notifications.js」模塊,看起來有點像這樣:用玩笑來嘲笑命名進口
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.
在我的測試,我想嘲笑權限和通知,所以我可以做這樣的事情在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()
})
我使用jest.mock
和jest.setMock
嘗試了各種東西,但我似乎無法得到這個工作。我如何着手以所需的方式嘲笑這些命名的導入?例如,我試過這個:
jest.setMock('Permissions',() => ({
askAsync: jest
.fn()
.mockImplementationOnce(() => ({ status: 'granted' }))
}))
但這並不奏效。它拋出
'module Permissions cannot be found from notifications.spec.js'
如果我試圖嘲弄整個世博模塊,嘲笑的功能expect().toBeCalled()
返回false。
我最初想這一點,但我認爲這是行不通的,因爲我的測試失敗。但事實證明,他們失敗了,因爲我的執行有一個錯誤。所以這確實是正確的方法。 – BarthesSimpson