Coffeescript测试捕获ajax调用

时间:2014-05-14 16:52:48

标签: testing coffeescript sinon

我正在尝试测试coffeescript类,我遇到了ajax调用问题。例如,在咖啡中,我使用$ .getJSON从服务器获取一些数据。如何在测试中捕获此请求或重定向到某个虚假服务器?我已经读过有关sinon fakeServer的一些内容,我试过这样的事情:

describe "TestClass", ->
  describe "#run", ->
    beforeEach ->
      url     = "/someUrl'
      @server = sinon.fakeServer.create()

      $ =>
        @server.respondWith("GET", url,
         [200, {"Content-Type": "application/json"},
                                    '{}'])

      @entriesDownloader = new TestClass().run()

但它不起作用。在方法运行中,我使用jquery调用API。如何捕获此请求并返回一些模拟。谢谢你的所有答案。

2 个答案:

答案 0 :(得分:2)

您可以在不需要虚假服务器的情况下存根$.getJSON方法。例如:

sinon.stub($, 'getJSON').yields({ prop: 'val' });

或者,如果您想仅存储某些网址的行为:

sinon.stub($, 'getJSON').withArgs('/someUrl').yields({ prop: 'val' });

可以使用$.getJSON.restore()

随时恢复该方法

答案 1 :(得分:0)

在我看来你错过了回调间谍。而你似乎没有运行任何测试,只有beforeEach。这是文档中的示例,它遵循AAA的典型模式:Arrange,Act,Assert:

server = undefined
before ->
  server = sinon.fakeServer.create()

after ->
  server.restore()

it "calls callback with deserialized data", ->
  callback = sinon.spy()
  getTodos 42, callback
  server.requests[0].respond 200,
    "Content-Type": "application/json"
  , JSON.stringify([
    id: 1
    text: "Provide examples"
    done: true
   ])
  assert callback.calledOnce

assert callback.calledOnce非常重要。另一个方便的功能是calledWith,如下所示:callback.calledWith(1, 2, 3)。当您将一组已知参数传递给测试函数时,使用该代码确保您的代码将正确的参数传递给外部函数。