2017-06-16 14 views
-1

私のテストとTravisがスクリプトを実行する能力の両方を満足させるパターンを考え出すのは難しいです。ノード/ ES6モジュールのモジュールパターンを改善する

script: 
    - babel-node ./src/client/deploy/deploy-feature-branch.js 

私は私が私のスクリプトを実行しているトラヴィスを持っている方法は、私がように私のtravis.ymlにノード・バベルコマンド経由で実行するスクリプトを指定することであるということから始めましょう

これは、ベベルノードがこれを実行するとき、私が持っているdeploy-feature-branch.jsで自動実行するメソッドが必要であることを意味します。それはラインlet { failure, success, payload } = deployFeatureBranch()です。そのdeployFeatureBranch()を実行するには destructコマンドが設定されているためです。トラヴィスは自動的process.env.TRAVIS_PULL_REQUEST_BRANCHの値を設定し、PRのビルド時には

let options = { 
    localBuildFolder: 'build', 
    domain: 'ourdomain', 
    branch: process.env.TRAVIS_PULL_REQUEST_BRANCH 
} 

があって、私も optionsオブジェクトを持っています。それは素晴らしいことです!しかし、私がこのモジュールをセットアップした方法は、テストのためにうまく動作しません。私が持っている問題は、が設定されていない何らかの理由で、私のテストからオプションを設定しようとすると、 です。

私が取り組んでいる問題は、まずテストから設定しようとすると、オプションが設定されない理由がまずあります。そして、このモジュールを全体的に設計するより良い方法があります。

テスト

import {options, deployFeatureBranch } from '../../../client/deploy/deploy-feature-branch' 

    it.only('creates a S3 test environment for a pull request', async() => { 
     options.branch = 'feature-100' 
     options.domain = 'ourdomain' 
     options.localDeployFolder = 'build' 

     const result = await deployFeatureBranch() 
     expect(result.success).to.be.true 
    }) 
}) 

ときに私のテストでは上記deployFeatureBranch()実行、 の実装はoptions.branchを参照しようとしますが、それは私が'feature-100'するように設定していてもundefinedなってしまいます。 branchはデフォルトでprocess.env.TRAVIS_PULL_REQUEST_BRANCHに設定されていますが、これを上書きしてテストから設定できるようにしたいと考えています。

配備-機能-branch.js

import * as deployApi from './deployApi' 

let options = { 
    localBuildFolder: 'build', 
    domain: 'ourdomain', 
    branch: process.env.TRAVIS_PULL_REQUEST_BRANCH 
} 

const deployFeatureBranch = async (options) => { 
    console.log(green(`Deploying feature branch: ${options.branch}`)) 
    let { failure, success, payload } = await deployApi.run(options) 
    return { failure, success, payload } 
} 

let { failure, success, payload } = deployFeatureBranch(options) 

export { 
    options, 
    deployFeatureBranch 
} 

私は本当にこれを構造化するし、また設定オプションの問題を解決するために、より良い方法を考えることはできません。また、Node Modulesの使用に限らず、ES6のエクスポートでも問題ありません。代わりにoptionsをエクスポートして、それを修正するのテストで関数を呼び出すときに、ちょうどあなたの新しいoptionsオブジェクトを渡す

答えて

0

import {deployFeatureBranch } from '../../../client/deploy/deploy-feature-branch' 

    it.only('creates a S3 test environment for a pull request', async() => { 
     const options = { 
     branch: 'feature-100', 
     domain: 'ourdomain', 
     localDeployFolder: 'build' 
     }; 

     const result = await deployFeatureBranch(options) 
     expect(result.success).to.be.true 
    }) 
}); 

あなたdeployFeatureBranch()機能がoptionsがあることを期待しているため、それが機能していない理由は、あなたがそれを呼び出すときに渡された、あなたがしていない。

また、オブジェクトをエクスポートしたり変更したりすることもできますが、これは本当に奇妙なことであり、避けるべきです。新しいオブジェクトを作成する(またはエクスポートされたオブジェクトを複製する)ことは間違いなく道のりです。

+0

私は知っていますが、私は契約を締結したいと思います。私は特定のフィールドだけを許可したいです –

+0

私はちょうどフロータイプ(私はtypescriptが好きではない)を使用する必要があります... –

+0

と私はそれにオプションを渡していると思った: 'const deployFeatureBranch = async(options)' –

関連する問題