2

我正在尝试通过 grunt 运行 cucumberjs 测试以获取浏览器堆栈功能矩阵。

矩阵通常配置为“grunt”(qcuberbatch 是本地 grunt 任务定义):

grunt.initConfig
    qcumberbatch:
        options:
            steps: 'src/features/integration/steps'
            tags: '~@ShouldFail'
            browserstack:
                'browserstack.user' : process.env.BS_USER
                'browserstack.key' : process.env.BS_ACCESS_KEY
                'browserstack.tunnel' : 'true' # This was the secret!

            matrix: [
                browser: 'firefox'
                browser_version: '26.0'
                os: 'Windows'
                os_version : '7',
            ,
                browser : 'IE',
                browser_version : '9.0',
                os : 'Windows',
                os_version : '7',
                resolution : '1024x768'
            ]
            hub: "http://hub.browserstack.com/wd/hub"

        local:
            files:
                src: ['src/features/integration/*']
            options:
                hub: 'http://localhost:4444/wd/hub'
                matrix: ['firefox']

        browserstack:
            files:
                src: ['src/features/integration/*']

        failing:
            files:
                src: ['src/features/integration/*']
            options:
                tags: '@ShouldFail'

默认选项是在 Windows 7 上使用 firefox 和 IE 对 browserstack 运行,本地测试覆盖 browserstack 以使用本地 selenium webdriver hub。

黄瓜世界由一个构造函数设置,该构造函数采用功能对象:

module.exports = class World
    ###
    Create a new world, assuming firefox capabilities.

    @param {string} browser property name from the `webdriver.Capabilities`
        list.
    ###
    constructor: (capabilities = {browserName: "firefox"})->
        @driver = new webdriver.Builder().
            usingServer(process.env.SELENIUM_HUB).
            withCapabilities(capabilities).build()

        @driver.manage().timeouts().setScriptTimeout(10000)

当从 grunt 运行它时,问题是 cucumberjs 没有编程接口(我看到了)。如果无法配置在运行时加载几个功能块中的哪一个,我应该怎么做才能在 cucumberjs 运行和 grunt 之间传达功能?

4

2 回答 2

1

我会按照我的建议使用您的解决方案和 JSON 对象。

但是,如果您对更加程序化的方法感兴趣,您可以很容易地实例化 Cucumber 运行时。CLI 源代码非常简单,它是如何从代码中调用 Cucumber 的一个很好的示例。请参阅https://github.com/cucumber/cucumber-js/blob/master/lib/cucumber/cli.js

于 2014-01-16T14:26:02.130 回答
0

可能的解决方案:

将一个文件写入 grunt 文件中的一个已知位置,其中包含所有功能。然后,启动几个 cucumberjs 运行,使用进程环境变量来告诉世界使用 blob 中的哪个功能。

我不喜欢这样,因为它涉及每次运行创建临时文件等。我更愿意在配置 World 对象时找到一种以编程方式使用 cucumberjs 的方法。

于 2014-01-16T14:10:38.417 回答