我正在努力想出一种既能满足我的测试又能满足 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 但我希望能够覆盖它并从测试中设置它。
部署功能分支.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 导出。
无需导出options
和修改它,只需options
在测试中调用函数时传入新对象:
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
在您调用它时被传入,而您并没有这样做。
此外,导出和更改对象虽然可能有效,但也确实很奇怪,应该避免。创建一个新对象(或克隆导出的对象)绝对是要走的路。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句