2016-10-28 5 views
0

Я пытаюсь сделать насмешку с использованием jest, ниже - псевдокод, который я пытаюсь попробовать, с шутка. Пожалуйста, бросьте некоторые мысли о шутовом насмешливости. Я ищу что-то похожее на sinon.stub() и которое можно легко решить с помощью resolve().Async Mock не работает с использованием Jest, есть ли лучший способ или простой способ, как sinon.stub()

class ExampleService { 
    static get() { 
    agent.get("/examples") 
    } 
} 

ExampleStore:

class ExampleStore { 
    const examples = [] 
    getExamples() { 
    ExperimentService.get().then((result) = > { 
     this.examples = result 
    }) 
    } 
} 

TestCases:

describe("ExampleStore",() = > { 
it("getExamples",() = > { 
    data = [{ 
    test: "test" 
    }] 
    ExperimentService.get = jest.fn(() = > { 
    return new Promise((resolve) = > { 
     process.nextTick(resolve(data) 
     }) ExampleStore.getExamples() expect(ExampleStore.examples).toBe(data) 
    } 
    }) 
}) 

ответ

0

Вы можете использовать jest.mock издеваться ExperimentService.get с собственной реализации:

import ExampleStore from './ExampleStore' 
jest.mock('path/to/ExperimentService'() =>({ 
    get:()=> return Promise.resolve({test: 'test'}); 
    //get:()=> {then: (fn)=> fn({test: 'test'})} if you don't want to mess with promises in your test 
})) 

describe("ExampleStore",() => { 
it("getExamples",() => { 
    ExampleStore.getExamples() 
    expect(ExampleStore.examples).toBe(data) 
    } 
    }) 
}) 

Я не Сюр e он будет работать с реальными обещаниями в причине заглушки, как правило, вам нужно ждать, пока обещание будет разрешено, и верните обещание от вашего теста, которое мы ожидаем от использования async. Посмотрите на how to handle promises. Так что либо используйте решение для комментариев, чтобы высмеять get, либо верните обещание в ExampleStore.getExample, чтобы вы могли дождаться его в тесте.

 Смежные вопросы

  • Нет связанных вопросов^_^