6

在我的 Grails 应用程序中,我想防止在运行单元测试时加载 Searchable 插件。我尝试在 Bootstrap 类中使用以下代码执行此操作

def grailsApplication

def init = {servletContext ->
    def currentEnv = grails.util.Environment.current.name

    if (currentEnv == 'test') {

        def doNothing = {println "Searchable is disabled"}

        // This returns null!
        def searchablePluginClass = grailsApplication.getClassForName("SearchableGrailsPlugin")

        searchablePluginClass.metaClass.doWithDynamicMethods = doNothing 
        searchablePluginClass.metaClass.doWithSpring = doNothing 
        searchablePluginClass.metaClass.doWithApplicationContext = doNothing 
    }
}

但是,这不起作用,因为grailsApplication.getClassForName("SearchableGrailsPlugin")返回 null,大概是因为此代码运行时此类不在类路径上。有没有其他方法可以禁用这个插件?

4

3 回答 3

9

我找到了解决方案。将以下内容添加到 Config.groovy:

environments {
    test {
        plugin {
            excludes = "searchable"
        }
    }
}
于 2009-07-27T20:29:50.083 回答
4

我不确定如何禁用插件,可能有一种方法可以使用本机指南针 XML

使用 grails,您可以通过以下方式使单元测试更容易接受...安装这个附加插件:grails install-searchable-config

这将为您提供 grails-app/conf/Searchable.groovy 文件。您可以编辑 environment.test.searchable 闭包以至少禁用 bulkIndexOnStartup 和 mirrorChanges。

 environments {
 test {
    searchable {
        // disable bulk index on startup
        bulkIndexOnStartup = false
        mirrorChanges = false

        // use faster in-memory index
        compassConnection = "ram://test-index"
    }
}
 }
于 2009-07-25T02:29:20.670 回答
0

要禁用运行测试使用的测试构建插件 - 如果您在 BuildConfig.groovy 中包含您的插件,则可以在其中执行以下操作;

environments {
            development {
                compile ":searchable:0.6.6"
            }
            test {
            }
            production {
                compile ":searchable:0.6.6"
            }
        }
}

这会阻止构建环境在测试时包含插件,但是,如果您使用此环境构建 UAT 版本,这也会影响测试版本。

于 2013-11-20T05:12:43.000 回答