如何测试异步JavaScript函数:Promises,Jasmine,PhantomJS

时间:2016-02-18 14:15:09

标签: javascript unit-testing asynchronous jasmine phantomjs

我正在尝试为从服务器检索数据的函数设置单元测试。我想测试该函数返回的预期数据。这是功能:

getData: ->

    url = api.getURL "data"
    fetch url

现在我使用fetch来获取数据,因此返回一个promise,所以我会使用这样的函数:

@getData()
.then (response)->
  response.json()
.then (data) ->
  //do stuff with 'data'

我使用Karma与Jasmine和PhantomJS进行单元测试。 PhantomJS目前不支持获取或承诺,所以我使用polyfill(同构提取和Q)。这就是我的测试套件的样子:

fetch = require "isomorphic-fetch"
Q = require "q"

describe "Module", ->

  myModule = require "./module.coffee"

  it "should get data", ->
    dfd = Q.defer()
    promise = dfd.promise
    spyOn(window, "fetch").and.callFake ->
      promise

    dfd.resolve
      test: "not ok"

    myModule.getData()
      .then (response) ->
        response.json()
      .then (data) ->
        expect(data).toEqual
          test: "ok"

尽管预期数据与提供的数据不同,但测试通过了。我怀疑取得的是不是?请有人建议我如何让这个工作,或者更好的方法来测试这个功能?感谢。

0 个答案:

没有答案