2

ブラウザスタック機能のマトリックスについて、うなり声を介して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 ハブを使用します。

きゅうりの世界は、機能オブジェクトを受け取るコンストラクターでセットアップされます。

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

考えられる解決策:

すべての機能の BLOB を使用して、grunt ファイル内の既知の場所にファイルを書き込みます。次に、プロセス環境変数を使用していくつかの cucumberjs の実行を開始し、ブロブからどの機能を使用するかを世界に伝えます。

実行ごとに一時ファイルを作成する必要があるため、これは好きではありません。 World オブジェクトを構成するときにプログラムで cucumberjs を使用する方法を見つけたいと思います。

于 2014-01-16T14:10:38.417 に答える