私のテストと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
オブジェクトを渡す
私は知っていますが、私は契約を締結したいと思います。私は特定のフィールドだけを許可したいです –
私はちょうどフロータイプ(私はtypescriptが好きではない)を使用する必要があります... –
と私はそれにオプションを渡していると思った: 'const deployFeatureBranch = async(options)' –