【问题标题】:Jasmine and Jquery, loading a JSON fileJasmine 和 Jquery,加载 JSON 文件
【发布时间】:2013-04-19 16:13:34
【问题描述】:

我有以下方法使用coffeescript/jquery 加载JSON 文件:

Class JsonParser

this.return  = (json_file_path, string_to_query) ->
  $.getJSON json_file_path, (data) ->
    $.each data, (key,val) ->
     if key == string_to_query
       return val

我正在 Jasmine 中测试它:

expect(JsonParser.return("file.json", "key").toEqual("value")

但茉莉吐出来的却是:

Expected { readyState : 1, getResponseHeader : Function, getAllResponseHeaders
 : Function, setRequestHeader : Function, overrideMimeType : Function, statusCode : Function, abort : 
Function, state : Function, always : Function, then : Function, promise : Function, pipe : Function, d
one : Function, fail : Function, progress : Function, complete : Function, success : Function, error :
 Function } to equal 'value'.

假设 JSON 文件只有一行:{ "key": "value" }

我只是被 jquery/coffeescript/ajax 等弄湿了,不明白 Jasmines 的反应。如果需要更多信息,请告诉我!谢谢!

【问题讨论】:

    标签: javascript jquery ajax coffeescript jasmine


    【解决方案1】:

    您的问题是您的 return 方法没有返回您认为的结果。您的 return 函数返回 getJSON 返回的内容,getJSON 是 AJAX 调用。 jQuery 的 AJAX 调用全部返回 jqXHRs,这与 AJAX 回调返回的内容无关。事件顺序如下所示:

    1. 你打电话给JsonParser.return
    2. return 致电$.getJSON
    3. getJSON 对服务器进行异步调用,然后返回 jqXHR
    4. return 返回的 jqXHRgetJSON 返回的相同。
    5. 一段时间过去了。
    6. 服务器开始响应,并调用您的回调来搜索 JSON。

    问题在于,当 (5) 发生时,调用 JsonParser.return 的代码仍在运行,但它没有 JSON。

    绕过 AJAX 调用的异步特性的常用方法是发送一个回调函数,该回调函数将在某事准备就绪时被调用:

    @return: (json_file_path, string_to_query, callback) ->
      $.getJSON json_file_path, (data) ->
        $.each data, (key,val) ->
         if key == string_to_query
           callback(val)
    

    然后你会这样使用它:

    JsonParser.return("file.json", "key", (value) ->
      # Do whatever needs to be done with value in here.
    )
    

    现在你有了一些应该可以工作的东西,你可以在这里找到如何使用 Jasmine:

    How do I verify jQuery AJAX events with Jasmine?

    【讨论】:

    • 感谢您的回复,我仍然得到相同的结果,我一直使用的 json 文件路径是本地文件,而不是通过服务器调用,这可能是一个问题吗?
    • @Discorick:没有服务器就无法进行 AJAX,也无法使用普通的 Jasmine 技术来测试 AJAX。
    猜你喜欢
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    相关资源
    最近更新 更多