2014-02-20 4 views
1

Фактически я пишу небольшой JS lib для инкапсуляции некоторых вызовов GET и POST во внешний Web-сервис. Есть ли хороший способ/лучшая практика тестирования таких библиотек? Должен ли я писать тесты против API для функций GET? Должен ли я помещать примеры ответов в тестовый каталог?Хороший способ проверить JS API Lib

P.S .: Я не могу отправить запрос POST API, потому что это система «LIVE».

+0

Слышали ли вы о [QUnit] (https://qunitjs.com/)? –

+0

Да. Чтобы уточнить, я создаю множество тестов для «функциональных функций». Это первый раз, когда нет реального значения возврата, кроме ответа API. Вопрос в том, как проверить это, когда нет DEV-API, где я могу запустить мой тест. –

ответ

0

Вы хотите использовать какой-то модульный модуль тестирования, как комментирует @BrianDriscoll. Их много.

Я столкнулся с этой проблемой, и я не нашел хорошую фальшивую фреймворк AJAX для JavaScript. Я закончил создание Mocking Bird.

Преимущества оскорбляющих запросов с пересмешника

  • Это дает мелкозернистого контроль над URL, метод HTTP, статус, заголовки запроса, заголовки ответа и тело ответа
  • Это легко отключить все родное XMLHttpRequest вызывает и вставляет объект-макет, который поддерживает один и тот же интерфейс, не изменяя код под тестом
  • Легко сохранить встроенный XMLHttpRequest, но создать макет запроса и ввести его в тестовый метод
  • AJAX становится синхронным, упрощая модульное тестирование.
  • пересмешника может быть использован с любым модульного тестирования рамках
  • Пересмешник не имеет внешних зависимостей

Недостатки

  • AJAX становится синхронным. Существует возможность того, что код испытуемый может вести себя по-разному
  • Там в настоящее время нет способа проверить подключение таймаута
  • Там в настоящее время нет способа проверить Chunked ответов HTTP
  • Вы на самом деле не делают конечный TO- (что вы должны делать в любом случае)
  • Нет запросов AJAX, если сетевые подключения отключены с помощью MockingBird.
  • Он не применяет ту же политику домена. Вы можете высмеивать вызов AJAX с перекрестным доменом, который проходит ваши модульные тесты, но выдает ошибку в тесте интеграции.

быстрый и грязный пример:

var request = new MockingBird.XMLHttpRequest() 
    .returnsStatus(200) 
    .returnsBody('{"message":"I am a teapot"}') 
    .returnsHeaders({ 
     "Content-Type": "text/json" 
    }); 

callSomeFunctionThatUsesAjax(request); 

function callSomeFunctionThatUsesAjax(xhr) { 
    xhr.onreadystatechange = function() { 
     ... 
    }; 

    xhr.open("POST", "/foo"); 
    xhr.send(null); 
} 

Вы также можете настроить фиктивные звонки в тех случаях, когда вы не можете предоставить свой собственный объект AJAX:

MockingBird.XMLHttpRequest.disableNetworkConnections() 
    .mock("/posts/123", "GET", { 
     status: 404, 
     body: "Page not found" 
    }) 
    .mock("/posts/321/comments", "POST", { 
     status: 201, 
     responseHeaders: { 
      "Content-Type": "text/json" 
     }, 
     body: { 
      post: { 
       id: 321, 
       comment: { 
        id: 1234 
       } 
      } 
     } 
    }); 

Теперь ваш код, который непосредственно инициализирует объект XMLHttpRequest даже не должен знать, что существует MockingBird:

function createComment(postId, text) { 
    var xhr = new XMLHttpRequest(); 

    xhr.onreadystatechange = function() { 
     if (this.readyState !== 4) return; 

     if (this.status === 201) { 
      var data = JSON.parse(this.responseText); 

      alert("Created comment: " + data.post.comment.id); 
     } 
     else if (this.status === 404) { 
      alert("Post " + postId + " not found!"); 
     } 
    }; 

    xhr.open("POST", "/posts/" + postId); 
    xhr.send("post[id]=" + postId + "&post[comment][text]=" + escape(text)); 
} 

createComment(123, "Test Test"); // alert's "Post 123 not found!" 
createComment(321, "Test Test"); // alert's "Created comment: 1234" 
+0

ОК. Как я уже сказал, я использую комбинацию фреймворков. Это одно из моих решений. посмотри на. На самом деле я только начинал с крошечного сервера node.js для имитации запросов и ответов + ошибок и латентности. Поэтому я могу запустить автоматические тесты (используя mocha + chai + node). Спасибо, Грег! –

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