2011-02-06 4 views
1

Я пытаюсь высмеять ответ на запрос dojo xhr, но я не нашел хорошего решения.Отказывание вызовов AJAX с Dojo XHR

В идеале, я хотел бы видеть решение, похожее на JQuery mockjax plugin, где я могу установить конкретный вызов, основанный на URL, например:

$.mockjax({ 
    url: '/restful/fortune', 
    responseTime: 750, 
    responseText: { 
    status: 'success', 
    fortune: 'Are you a turtle?' 
    } 
}); 

Моя первая мысль была, чтобы использовать «/ додзё/io/send ", но я не смог получить модифицированный ответ для загрузки после изменения объекта отложенного додзё.

Другая мысль использовать метод сквозной, который будет определять, если фактический запрос XHR следует, например:

function xhrRequest(xhrArgs) { 
    if(shouldMock) { 
     var fakeReturnJson = dojo.toJson({ 
     howdy: "that's odd!", 
     isStrange: false 
     }); 
     return fakeReturnJson; 
    } else { 
     dojo.xhr(xhrArgs); 
    } 

} 

Может кто-нибудь сказать мне, что лучший способ идти о насмехаясь додзё XHR звонки ?

Спасибо!

ответ

2

Это старый вопрос, но я думаю, что вы должны сделать свой насмешливый используя Sinon.js

Однако вам нужно будет поместить следующее:

has: { native-xhr2: false } 

в вашу dojoConfig для того, чтобы работать в 1,8

+0

Забавно, я начал использовать синон, чтобы помогать с насмешкой и шпионами. Мне удалось бросить домашнее издевательское решение, основанное на выпуске jQuery Mockjax, однако он определенно не так прост в API, как решение XHR от sinon. – rakis

0

Я не слышал о каких-либо конкретных библиотеках Dojo, подобных Mockjax. Но я думаю, что вы можете попробовать использовать Mockjax с Dojo. Это должно быть довольно легко сделать, поскольку все, что вам нужно сделать, это использовать JQuery во время разработки только для тестирования с помощью Mockjax, а затем удалить его после завершения разработки.

0

Я использую ваше второе предложение. В настоящее время у меня есть транспортный уровень (простой класс js) и 2 реализации (XhrTransport и MockTransport). Затем я переключаюсь туда, где мне нужно, не меняя код виджета. виджетов вызовите сервер с:

Controller.send(aServerCall); 

, где aServerCall представляет собой простой объект значения с сервером конечной точкой, Params и обратным вызовом.

Таким образом, вы можете добавить приятные вещи в контроллер, который будет применяться ко всем вызовам сервера (например, ведение журнала, аналитика, общая обработка ошибок ...), а также издеваться над всем сервером при выполнении модульных тестов. Для MockTransport я просто возвращаю сохраненные json-данные из статических файлов .js в формате, который ожидает виджет.

Смежные вопросы