Тестирование приложения Grails Создание файла PDF Не удается получить свойство 'config' для нулевого объекта - PullRequest
0 голосов
/ 13 июня 2018

Я пытаюсь протестировать класс обслуживания, который сгенерирует pdf-файл, но возникает эта ошибка:

[getDocument] ИСКЛЮЧЕНИЕ: переменные: [input, input, input], message: Cannot getсвойство 'config' для нулевого объекта

Мой класс обслуживания:

class TemplateService {

    static transactional = false
    def grailsApplication

    def getDocument(inputs, idTemp) {
        def result
        if(inputs) {
            long dateBeginTransaction = System.currentTimeMillis()

            try {
                def http = new HTTPBuilder(grailsApplication.config.tempdoc.url?.replace("COI", idTemp))
                http.auth.basic grailsApplication.config.rest.login, grailsApplication.config.rest.password

                http.request(POST,JSON) { req ->
                    headers.'Accept' = 'application/json'
                    headers.'Content-type' = 'application/json'
                    body = [
                        inputs: inputs
                    ]
                    response.success = { resp, json ->
                        log.info "[getDocument] time: " + (System.currentTimeMillis() - dateBeginTransaction) / 1000 + " ms"
                        result = json?.pdf
                    }

                    response.failure = { resp, reader ->
                        log.error "[getDocument] inputs: " + inputs + ", response: " + resp + ", message: " + reader?.message
                    }
                }
            } catch (Exception e) {
                log.error "[getDocument] EXCEPTION: inputs: " + inputs + ", message: " + e.message
            }
        } else {
            log.error "[getDocument] params sense valors"
        }
        result
    }
}

Это мой тест: * Примечание: входные данные являются массивом

void "generate document"() {
    given: "generate document"
        def TemplateService = new TemplateService()

    when:
        def result = TemplateService.getDocument(inputs, idTemp)

    then:
        result != null
        result.size() > 0   

    where:
       inputs = [ "input", "input", "input"]
        idTemp =  "12AD"
}

Ответы [ 2 ]

0 голосов
/ 15 июня 2018

вы можете сделать свой тест интеграционным тестом (переместить его в папку test / Integration-Test), и таким образом grailsApplication будет внедрен в ваш сервис

0 голосов
/ 13 июня 2018

По крайней мере, вам придется смоделировать конфигурацию в вашем тесте.В Граале 3.3.5:

class PlaServiceSpec extends Specification implements ServiceUnitTest<Plaservice>, DataTest {

    Closure doWithConfig() {{ config ->
        config.plantidoc.url = 'my url'
    }}

    void "generate document"() {
        given:
            def variables = ["input:input", "input:input"]
            def idPlantitlla = "12AD"

        when:
            def result = service.getDocument(variables, idPlantitlla)

        then:
            // test the result
    }
}
...