【发布时间】:2017-06-16 19:41:18
【问题描述】:
我正在努力想出一个既能满足我的测试又能满足 Travis 运行我的脚本能力的模式。
我首先要说我让 Travis 运行我的脚本的方式是我在我的 travis.yml 中指定要通过 node-babel 命令运行的脚本,如下所示:
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 构建期间,travis 自动设置 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 但我希望能够覆盖它并从测试中设置它。
deploy-feature-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 导出。
【问题讨论】:
标签: javascript node.js ecmascript-6