Поблочное тестирование метод контроллера?

У меня есть метод контроллера как такой:

def search = {
    def query = params.query

            ...

    render results as JSON
}

Как делают меня модульный тест это? А именно, как я называю поиск для установки params.query, и как я тестирую результаты метода render? Существует ли способ дразнить метод рендеринга, возможно?

6
задан ataylor 8 September 2010 в 17:44
поделиться

3 ответа

Подкласс grails.test.ControllerUnitTestCase для ваших модульных тестов. Grails автоматически создаст экземпляр вашего контроллера и имитирует версии рендеринга и перенаправления, что позволит вам легко проверить результаты. Просто назначьте тестовые входы на controller.params, чтобы настроить тест.

Пример:

class SomethingController {
    def search = {
        def query = params.query
        ...stuff...
        render results as JSON
    }
}

Тест выглядит так:

class SomethingControllerTests extends grails.test.ControllerUnitTestCase {
    void testSearch() {
        controller.params.query = "test query"
        controller.search()
        assertEquals "expected result", controller.response.contentAsString
    }
}

Примечание: вы также можете использовать ControllerUnitTestCase для интеграционных тестов, если вам нужна полная среда интеграции с базой данных.

5
ответ дан 17 December 2019 в 04:43
поделиться

TFM : Grails ref chapter 9

Следуйте примеру testCreateWithJSON () ... просто вставьте строку запроса в params ['query'], установите contentType, вызовите search (). Поскольку вы явно вызываете render, самым интересным было бы посмотреть response.contentAsString ...Я бы, вероятно, просто сделал утверждения о сопоставлении с образцом для contentAsString; вы можете повторно проанализировать его как JSON, а затем изучить это дерево объектов, но я подозреваю, что это будет не так ясно / быстро, как простые утверждения о сопоставлении с образцом.

0
ответ дан 17 December 2019 в 04:43
поделиться

Есть два способа модульного тестирования контроллера, но это потребует от вас некоторых изменений.

Первый - это модульное тестирование самого контроллера, без добавления сложности http парсинга, так что вы напишите свой модульный тест и передадите params.query как часть вашего модульного теста, поэтому разделите вашу функцию поиска на две функции:

def search = {
  def query = params.query
  render realSearch(query) as JSON
}

def realSearch ...

Итак, первая часть тестирует realSearch.

Затем вторая часть - написать приложение, которое действительно подключится к вашему веб-приложению, и провести функциональный тест, который протестирует все ваше приложение, включая те части контроллера, которые не были протестированы в первой части.

0
ответ дан 17 December 2019 в 04:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: