grails - 无法在 grails 2.3.6 中加载数据或为 FixtureLoader 1.2 创建加载程序

标签 grails grails-2.0 fixtures

我在引导 Grails 2.3.6 时加载固定装置时遇到问题。

尝试加载数据抛出空指针

这是我尝试使用的代码:

class BootStrap {
    def fixtureLoader
    def init = { ServletContext ctx ->
        environments {
            ...
            development {
                fixtureLoader.load("developmentTinySanityCheckData")
            }
        }
    }
    ...

我的项目位于~/grails-2.3.6-workspace/imca2 所以我希望上面的内容能够加载 developmentTinySanityCheckData.groovy 来自~/grails-2.3.6-workspace/imca2/fixtures

该文件确实存在并且可读:

ls -lt ~/grails-2.3.6-workspace/imca2/fixtures
-rw-r--r-- 1 nick nick    83 2014-03-16 19:32 developmentTinySanityCheckData.groovy

并包含最少的数据:

fixture {
    DoctorDecisionMakerType(com.ubergen.DecisionMakerType) {
        code = "Doctor"
    }
}

但是加载失败,GrailsContextLoader NullPointerException: Cannot invoke load() on null object

[localhost-startStop-1] ERROR context.GrailsContextLoader  - Error initializing the application: Cannot invoke method load() on null object
java.lang.NullPointerException: Cannot invoke method load() on null object
at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:77)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:45)
...
at BootStrap$_closure1_closure3_closure6.call(BootStrap.groovy)
at groovy.lang.Closure.call(Closure.java:405)
at BootStrap$_closure1_closure3_closure6.call(BootStrap.groovy)
...

无法注入(inject)FIXTURELOADER?

我假设空对象意味着 fixture 加载器没有被实例化;也许它不是由依赖注入(inject)器创建的?不知道这个说法是否正确。

我试图强制fixtureLoader存在:

class BootStrap {
    def fixtureLoader
    def init = { ServletContext ctx ->
        fixtureLoader = ctx.getBean('fixtureLoader'); // INJECT LOADER
        environments {
            ...
            development {
                fixtureLoader.load("developmentTinySanityCheckData")
            }
        }
    }
    ...

但是得到 - 没有 getBean() 的签名适用于参数 [fixtureLoader]

ERROR context.GrailsContextLoader  - Error initializing the application: No signature of method: org.apache.catalina.core.ApplicationContextFacade.getBean() is applicable for argument types: (java.lang.String) values: [fixtureLoader]

版本:

ubuntu 10.04
eclipse / SpringToolSuite 3.4.0
grails 2.3.6
groovy 2.1.9 (for both project and workspace)
grails plugins:
    build-test-data 2.1.2
    fixtures 1.2

最佳答案

我最初的问题是尝试在fixtureLoader 上调用load 时抛出了一个空指针。看来fixtureLoader 不可用,至少在开发模式下是这样。

在检查 BuildConfig.groovy 时我发现

plugins {
    ...
    compile ":build-test-data:2.1.2"
    test ":fixtures:1.2"
}

这可能意味着只有在执行模式为测试时才创建 fixture 加载器并可供使用。

我将其更正为:

plugins {
    ...
    compile ":build-test-data:2.1.2"
    compile ":fixtures:1.2"
}

并且加载程序也已创建并在开发模式下工作。

关于grails - 无法在 grails 2.3.6 中加载数据或为 FixtureLoader 1.2 创建加载程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22442551/

相关文章:

javascript - ava中连续异步测试步骤

grails - 如何将真/假更改为[bootstrap]镜像

eclipse - 如何让GGTS/STS超快?

Grails CommandObject 验证何时应该失败

grails - Grails命令对象未通过验证

ruby-on-rails - 在 Rails 固定装置中,Quentin 是谁?

grails - jetty 9 : setting up the most basic SSL/https

Grails 数据服务无法使用常规服务

grails - 这个异常是什么意思?

dependency-injection - 跨多个测试套件的 Scalatest 共享服务实例