3

У меня есть простой Grails контроллер:Grails: Unit метод контроллера тестирования с доменом классом

class AuthorController { 

    def index(){ 
     def authors = Author.findByFirstName("Albert") 
     render (view: "author-page", model: ["authors":authors]) 

    } 
} 

Здесь автор является классом домена, который отображается в виде таблицы в базе данных SQL.

Я пытаюсь написать модульный тест для него, как это:

import grails.test.mixin.Mock 

@Mock(Author) 
class AuthorControllerSpec extends Specification { 

    void "when index is called, authorPage view is rendered"() { 
      when: 
       controller.index() 
      then: 
       view == "/author-page" 

    }  

}

Но когда я запускаю этот тест, я получаю java.lang.IllegalStateException: Метод на классе [ком .mypackage.Author] использовался вне приложения Grails. Если вы выполняете в контексте теста, используя насмешливый API или загрузочный Grails правильно.

Может ли кто-нибудь сказать мне, как правильно проверить мои действия? У меня возникают проблемы с издевательством над методом Author.findByFirstName().

Я использую Grails 2.4.2

Спасибо.

ответ

4
import grails.test.mixin.Mock 
import grails.test.mixin.TestFor 
import spock.lang.Specification 

@TestFor(AuthorController) 
@Mock([Author]) 
class AuthorControllerSpec extends Specification { 

    void "when index is called, authorPage view is rendered"() { 
      when: 
       controller.index() 
      then: 
       view == "/author-page" 

    }  
} 

Попробуйте это.

0

Использовать @TestFor(AuthorController) аннотация наверху в вашем тестовом корпусе контроллера. Кроме того, кронштейны не должны находиться после расширения класса Specification. Просто хотел подтвердить, это может быть опечатка в вопросе. Если проблема по-прежнему сохраняется, попробуйте установить плагин Grails webxml.

Посмотрите на here для получения дополнительной информации.

Надеюсь, что это поможет!

Спасибо,
SA

+0

Спасибо. Я использую @TestFor наверху, все равно не работает. Скобки отсутствуют. Спасибо, что поймал это. Я удалил его. – Stealth

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