2017-09-19 64 views
0

我有一個包含負載功能和加載函數調用jQuery的的getJSON功能模塊如何使用茉莉嘲笑的jQuery的getJSON回調

load(key,callback){ 
    // validate inputs 
    $.getJSON(this.data[key],'',function(d){ 
     switch(key){ 
     // do some stuff with the data based on the key 
     } 
     callback('success'); 
    }); 
} 

茉莉花2.0我怎樣才能模擬出調用的getJSON,但供應數據到匿名函數?

+0

退房間諜https://jasmine.github.io/2.0/introduction.html#section-Spies –

回答

1

我推薦使用Jasmine的ajax插件,它可以模擬所有的AJAX調用(getJSON是ajax調用)。下面是如何做到這一點的例子:

//initialise the ajax mock before each test 
beforeEach(function() { jasmine.Ajax.install(); }); 
//remove the mock after each test, in case other tests need real ajax 
afterEach(function() { jasmine.Ajax.uninstall(); }); 

describe("my loader", function() { 
    it("loads a thing", function() { 
     var spyCallback = jasmine.createSpy(); 
     doTheLoad("some-key", spyCallback); //your actual function 

     //get the request object that just got sent 
     var mostRecentRequest = jasmine.Ajax.requests.mostRecent(); 

     //check it went to the right place 
     expect(mostRecentRequest.url).toEqual("http://some.server.domain/path"); 

     //fake a "success" response 
     mostRecentRequest.respondWith({ 
     status: 200, 
     responseText: JSON.stringify(JSON_MOCK_RESPONSE_OBJECT); 
     }); 

     //now our fake callback function should get called: 
     expect(spyCallback).toHaveBeenCalledWith("success"); 

    }); 
}); 

還有其他的方法,但是這一個已經工作對我很好。更多的文檔在這裏:

https://github.com/jasmine/jasmine-ajax

+0

這讓我沒有定義getJasmineRequireObj錯誤。 – Wanderer

+0

您需要將jasmine ajax插件作爲幫助程序添加到您的測試框架中 - 請查看我提供的鏈接以獲取更多詳細信息。 –

+0

叫我厚......我不確定這是什麼意思......我已經通過npm安裝了它。我需要('jasmine-core');'和'require('jasmine-ajax')'。我已經嘗試過'var jasmine = Object.assign({},require('jasmine-core'),require('jasmine-ajax'));''''''''''我試過從node_modules複製mock-ajax.js文件到spec/helpers/ – Wanderer