异步模拟不使用Jest工作,有没有更好的方法或简单的方式sinon.stub()

时间:2016-10-28 00:43:43

标签: javascript jestjs

我正在尝试使用 jest 进行模拟,下面是我尝试尝试的伪代码,找到真正触及 jest 。请对开玩笑嘲笑一些想法。我正在寻找与sinon.stub()类似的内容,可以使用resolve()轻松解决。

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)
    }
  })
})

1 个答案:

答案 0 :(得分: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)
    }
  })
})

我不确定它是否可以在存根中使用真正的承诺因为通常你需要等待承诺得到解决并从测试中返回我们使用异步等待的承诺。看看how to handle promises。 因此,要么使用注释解决方案来模拟get或返回承诺 在ExampleStore.getExample中,以便您可以在测试中等待它。