我正在努力想出一个模式,以满足我的测试和Travis运行我的脚本的能力。为节点/ ES6模块提出更好的模块模式
,我会说,我已经特拉维斯运行我的脚本的方式是我指定的脚本在我travis.yml通过节点通天命令运行如这样开始:
script:
- babel-node ./src/client/deploy/deploy-feature-branch.js
这意味着当babel-node运行这个时,我需要一个方法来自动运行我所拥有的deploy-feature-branch.js
。这是行let { failure, success, payload } = deployFeatureBranch()
。那部队deployFeatureBranch()
运行,因为它被设置为去结构命令。
在那里我也有一个options
对象:
let options = {
localBuildFolder: 'build',
domain: 'ourdomain',
branch: process.env.TRAVIS_PULL_REQUEST_BRANCH
}
在一个PR构建,特拉维斯自动设置process.env.TRAVIS_PULL_REQUEST_BRANCH
的值。那很棒!然而,我设置这个模块的方式对于测试来说效果不佳。我遇到的问题是如果我尝试从我的测试中设置选项,由于某些原因选项对象未设置为。
我想我要解决的问题首先是为什么当我尝试从我的测试中设置它们时,没有设置选项。那么是否有更好的方法来设计这个模块?
测试
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
但它最终被undefined
即使我将其设置为'feature-100'
。分支默认为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
}
我真的不能想到一个更好的方法来组织这一点,也解决了设置选项的问题。我也不仅限于使用节点模块,我也可以使用ES6导出。
我知道但我想强制执行合同。我只想要某些字段被允许 –
我想我应该只使用流量类型(我不喜欢打字稿)... –
我以为我传递选项:'const deployFeatureBranch = async(options)' –