Testing Grails集成测试失败,因为在引导过程中获取了i18n消息

Testing Grails集成测试失败,因为在引导过程中获取了i18n消息,testing,grails,internationalization,Testing,Grails,Internationalization,我在Grails 4.0.1应用程序中添加了对Boostrap.groovy的服务方法调用: @GrailsCompileStatic class BootStrap { GrailsApplication grailsApplication SelfAssessmentRatingService selfAssessmentRatingService def init = { servletContext -> TimeZone.setDefa

我在Grails 4.0.1应用程序中添加了对
Boostrap.groovy
的服务方法调用:

@GrailsCompileStatic
class BootStrap {

    GrailsApplication grailsApplication
    SelfAssessmentRatingService selfAssessmentRatingService

    def init = { servletContext ->
        TimeZone.setDefault(TimeZone.getTimeZone("UTC"))

        ...

        SelfAssessmentRating rating = SelfAssessmentRating.first()
        if (!rating) {
            selfAssessmentRatingService.createRatingsFromConfig()
        }
    }

    def destroy = {
    }
}
在服务方法中,为我在应用程序配置中的
setup.selfAssessmentRatings
中指定的每个对象获取一条i18n消息

@GrailsCompileStatic
@Slf4j
@Transactional
class SelfAssessmentRatingService implements GrailsConfigurationAware {

    MessageSource messageSource

    List<Map> setupAssessmentRatings

    @Override
    void setConfiguration(Config co) {
        List selfAssessmentRatings = co.getProperty('setup.selfAssessmentRatings', List, null)
        setupAssessmentRatings = selfAssessmentRatings as List<Map>
    }

    /**
     * Saves a SelfAssessmentRating record for each one specified in the application config.
     * This method gets called if there are no SelfAssessmentRating records saved.
     */
    def createRatingsFromConfig() {
        if (setupAssessmentRatings == null || setupAssessmentRatings.empty) {
            log.info("Skipping creating SelfAssessmentRatings because none were specified " +
                "in the config: 'setup.selfAssessmentRatings'")
            return
        }

        log.info("Saving ${setupAssessmentRatings.size()} new SelfAssessmentRating records")
        for (Map map in setupAssessmentRatings) {
            // SelfAssessmentRating is a domain class
            SelfAssessmentRating newRating = new SelfAssessmentRating()
            newRating.rating = map.rating as Integer
            newRating.englishText = map.englishText
            newRating.translationKey = map.translationKey
            newRating.save(failOnError: true)
            // Verify we have that translation. This will throw an exception if the translation is not present.
            messageSource.getMessage(newRating.translationKey, [].toArray(), Locale.default)
        }
    }
}
我在grails app/i18n/messages.properties中定义了这三条消息:

example.selfAssessment.noExperience=No Experience or Knowledge
example.selfAssessment.someExperience=Some Experience or Knowledge
example.selfAssessment.functionIndependently=Able to function independently in this area
我的集成测试都通过了CircleCI(
/gradlew-Dgrails.env=CircleCI integrationTest
),但在我的本地计算机上,每次集成测试都会出现以下错误:

org.springframework.context.NoSuchMessageException: No message found under code 'example.selfAssessment.noExperience' for locale 'en_US'.
    at org.springframework.context.support.AbstractMessageSource.getMessage(AbstractMessageSource.java:161)
    at com.hclabs.ojt.step.SelfAssessmentRatingService.$tt__createRatingsFromConfig(SelfAssessmentRatingService.groovy:46)
有人知道如何让集成测试在本地再次通过吗


在本地计算机上调用
/gradlew integrationTest
时,是否可以添加参数或设置环境变量,以便Grails可以在
Grails app/i18n/messages.properties
中找到消息?

我试图重现该行为,但无法执行。请参阅上的项目。如果你能发送一个PR给那个演示问题的人,这将使故障排除变得更容易。事实证明这不是问题。我刚刚删除了项目中的.gradle目录,并重新运行了集成测试,结果通过了。谢谢你调查此事。
org.springframework.context.NoSuchMessageException: No message found under code 'example.selfAssessment.noExperience' for locale 'en_US'.
    at org.springframework.context.support.AbstractMessageSource.getMessage(AbstractMessageSource.java:161)
    at com.hclabs.ojt.step.SelfAssessmentRatingService.$tt__createRatingsFromConfig(SelfAssessmentRatingService.groovy:46)