Интеграционный тест Grails Spock redirectedUrl отличается между тестовым приложением localhost и тестовым приложением сервера сборки

У меня есть тест интеграции Спока, который выглядит примерно так:

class PriceTierControllerIntegrationSpec extends IntegrationSpec {

    PriceTierController controller

    def setup() {
        controller = new PriceTierController()
    }

    def "applyDiscount() method will redirect user to success view"() {
        when:
        controller.applyDiscount()

        then:
        controller.response.redirectedUrl == '/priceTier/success'
    }

Тогда в контроллере логика проста:

class PriceTierController {

    def applyDiscount() {
        redirect action: 'success'
    }

    def success() {
    }
}

Когда я запускаю этот тест Спока на моей локальной машине, тест проходит. Однако на сервере сборки я получаю следующую ошибку:

controller.response.redirectedUrl == '/priceTier/success'
|          |        |             |
|          |        /test/success false
|          |                      8 differences (46% similarity)
|          |                      /(t---)e(st--)/success
|          |                      /(pric)e(Tier)/success
|              org.codehaus.groovy.grails.plugins.testing.GrailsMockHttpServletResponse@dc42543
com.test.PriceTierController@193d6547

По какой-то причине на сервере сборки тест Спока считает, что имя контроллера test вместо priceTierи тест не пройден. Похоже, это происходит только для интеграционных тестов Spock, так как модульные тесты Spock и несколько устаревших тестов Grails Mixin все проходят нормально.

Кто-нибудь знает, что может быть причиной этой проблемы?

1 ответ

Я также только что столкнулся с этой же проблемой, и кажется, что все сводится к тестовой среде, извлекающей имя контроллера из имени класса тестирования.

Соглашение состоит в том, что тестовый класс называется <controller name>ControllerSpec

В приведенном выше случае тестовый класс должен быть назван PriceTierControllerSpec так что тестовая среда успешно разрешит контроллер PriceTeir,

Наименование класса в соответствии с этими рекомендациями, похоже, решает эту проблему.

Дополнительную ссылку можно найти здесь: https://jira.grails.org/browse/GRAILS-10962

Другие вопросы по тегам