您正在傳遞一個空對象的功能Ext.decode(),因此當函數嘗試訪問responseText它收到未定義的屬性。
// var response = {}; - empty object created in your test
Ext.decode(response.responseText);
在你的onSuccess函數調用的returnValue()將返回空數組 - 在你的間諜成立。這個空的數組將被存儲在文本變量中。然後它將被傳遞給loadRawData()函數,而不是decode(),正如您的間諜當前所期待的那樣。
var text = Ext.decode(response.responseText);
this.someGrid.store.loadRawData(text);
爲了正確測試,你可以嘲笑響應對象在您的測試包含一個responseText的屬性的函數。而且你還可以添加間諜,並期望爲loadRawData()函數語句,像下面這樣:
it('Function will call decode method', function() {
// mock response object has responseText propety
var response = { responseText: 'mockResponseText' };
spyOn(Ext, 'decode').and.returnValue([]);
// spy to LoadRawData added to check return value of decode is passed on correctly
spyOn(me.testObj.someGrid.store, 'loadRawData');
me.testObj.onSuccess(response);
// Ext.decode should be called with the response text
expect(Ext.decode).toHaveBeenCalledWith('mockResponseText');
// loadRawData should be called with return value of decode function
expect(me.testObj.someGrid.store.loadRawData).toHaveBeenCalledWith([]);
})
我不認爲這個測試是非常有用的。這更多地測試了框架的內部。您最好測試一下商店中的數據是否與您認爲的一致。 –