2012-02-20 7 views
4

POSTリクエストのサーバーレスポンスをSinon.jsでモックしようとしています。成功コールバックを発生させないことを除いて、正常に動作するようです。あなたのJSONが無効なためSinon.js fakeServerが応答メソッドでコールバックを起動していません

# In the Exercise model: 

    submit: (query) -> 
    callback = (data) -> alert(data) 
    $.post(@url(), { query: query }, callback) 

# In the Exercise spec: 

    beforeEach -> 
    @server = sinon.fakeServer.create() 
    @server.respondWith('POST', @exercise.url(), 
         [ 200, { "Content-Type": "application/json" }, 
         '[{ correct: true, result_set: {} }' ]) 

    @exercise.submit('select * from students') 


    # passes 
    it "request is a POST", -> 
    expect(@server.requests[0].method).toEqual('POST') 

    # passes 
    it "submits to the correct url", -> 
    expect(@server.requests[0].url).toEqual(@exercise.url()) 

    it "fires the callback", -> 
    @server.respond() 
    # no callback fired! but if I inspect the server object I can see that 
    # the queue is empty, and the response is properly attached to the request object. 
    # see the state below 

# State of the Server object 

{"requests":[ 
{"readyState":4, 
"requestHeaders": 
    {"Content-Type":"application/x-www-form-urlencoded;charset=utf-8", 
    "Accept":"*/*", 
    "X-Requested-With":"XMLHttpRequest"}, 
"requestBody":"query=select+*+from+students", 
"status":200, 
"statusText":"OK", 
"method":"POST", 
"url":"exercises/some_id", 
"async":true, 
"responseText":"[ 
    { correct: true, 
     result_set: 
     {} }", 
"responseXML":null, 
"sendFlag":true, 
"errorFlag":false, 
"responseHeaders": 
    {"Content-Type":"application/json"}}], 
"responses":[ 
{"method":"POST", 
"url":"exercises/some_id", 
"response":[200, 
    {"Content-Type":"application/json"},"[ 
    { correct: true, 
     result_set: 
     {} }"]}], 
    "queue":[]} 

答えて

4

それはエラーコールバックを発射:'[{ correct: true, result_set: {} }'あなたの回答を確認するか、JSON.stringifyを使用するhttp://jsonlint.com/を使用してみてください、あなたはそれを心配する必要はありません。

+0

グッドアイクリスチャン!私は、JSON解析エラーの場合にどこかにバブルするエラーが予想されます。ありがとう。 – brentvatne

+0

エラーコールバックにエラーが表示されます;)Sinonはブラウザのようにレスポンスの内容についてほとんど知りません。 –

関連する問題