Интеграционный тест 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