grails - 从 grails 插件执行 Cucumber Specs

标签 grails cucumber-jvm

在我的 grails 应用程序中,我有不同的插件,可用于所有应用程序。这些插件在“测试/功能”中有 cucumber 规范和geb页面。我想做的是在每个使用插件的应用程序中,插件的测试应该在应用程序的上下文中执行。

为了实现这一点,我想知道,应用程序的 CucumberConfig.groovy 中的配置必须是什么样的。

我想出了这样的事情:

cucumber {
  tags = ["~@ignore"]
  features = ["plugins/plugin-name/test/functional"]
  glue = features
}

但它并没有按照它应该的方式工作。也许这甚至是实现我目标的错误方法。如果是,请不要犹豫告诉我。

如果有人有想法,那就太好了。

最佳答案

这对我有用:

import org.codehaus.groovy.grails.plugins.GrailsPluginUtils

String pluginDir     = GrailsPluginUtils.pluginInfos.find { it.name == '<nameOfPlugin>' }.pluginDir
String pluginCukeDir = [pluginDir, 'test', 'cucumber'].join (File.separator)

println "($pluginDir) ($pluginCukeDir)"

cucumber {
    tags = ["~@ignore"]

    features = [
        "test/cucumber", pluginCukeDir
    ]
    glue = features
}

我使用 grails-cucumber 的 geb 示例,将示例中的一个功能复制到插件测试目录中,并重命名步骤以避免 DuplicateStepDefinitionException .

使用 test/cucumber而不是 test/functional应该没有区别。

更新:

仔细看看,这会起作用,但有一些并发症。你必须自己决定它是否有返回。

如果我们在插件测试代码中有geb代码(页面对象/模块),则必须对其进行编译。我们可以用 sources 告诉 cucumber-grails 这样做。配置。这会将给定的源文件夹(包括任何步骤代码)编译成 target/test-classes/functional (我们处于功能测试阶段)。

接下来我们必须使用 glue 扩展 cucumber 的类路径。通过添加配置
“类路径:”条目。

问题:

因为插件测试代码被编译到与项目测试代码相同的文件夹中,所以我们必须注意插件代码不会使用相同的包或类名覆盖项目中的类。

我们还必须照顾 cucumber 钩。我们不想运行多次设置 geb 的 @Before/@After 钩子(Hook)(即从当前项目及其插件中)。解决方案应该是在项目和插件中以不同的方式标记 Hook ,并将适当的标签添加到标签配置中,以便 geb 设置 Hook 仅针对给定标签运行。

然后配置将如下所示:
import org.codehaus.groovy.grails.plugins.GrailsPluginUtils

String pluginDir     = GrailsPluginUtils.pluginInfos.find { it.name == '<nameOfPlugin>' }.pluginDir
String pluginCukeDir = [pluginDir, 'test', 'functional'].join (File.separator)

cucumber {
    sources = [
        //"test/functional", // automatically compiled by grails
        pluginCukeDir        // cucumber plugin tells grails to compile this
    ]

    features = [
        "test/functional",
        pluginCukeDir
    ]

    glue = [
        "classpath:<inside target/test-classes/test/functional>"
    ]
}

关于grails - 从 grails 插件执行 Cucumber Specs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24161462/

相关文章:

unit-testing - 为什么将空字符串转换为 null 传递给 Grails 2.4.0 中域对象的构造函数?

web-services - 如何将Jasper REST API的输出更改为JSON而不是XML

mysql - SQL 到 HQL 查询 Grails

grails - grails 3 应用程序的 gpc 渲染插件出现问题

cucumber - Karate 测试框架: Only one assert using Examples

java - 如何使用 cucumber-jvm、cucumber-serenity 和 SerenityObjectFactory 进行多态测试

grails - 从 Roo 迁移到 Grails

java - 从功能内部运行 cucumber 功能?

java - 使用 Maven Surefire 的并行 Cucumber-JVM Selenium 网格测试

java - 为什么cucumber在所有胶水代码文件中运行@Before