我正在努力想出一個模式,以滿足我的測試和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)' –