为 Node/ES6 模块提出更好的模块模式

暗物质

我正在努力想出一种既能满足我的测试又能满足 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.branchundefined即使我将它设置为'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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

尝试将类导出为模块ES6 babel

来自分类Dev

ES6模块:重新导出为对象

来自分类Dev

使用webpack将库输出为ES6模块?

来自分类Dev

为JavaScript对象模块模式设置构造函数

来自分类Dev

在每次测试中为所需的模式模块创建新对象

来自分类Dev

在每次测试中为所需的模式模块创建新对象

来自分类Dev

为perl安装模块

来自分类Dev

为perl安装模块

来自分类Dev

为PerRequestLifetimeManager注册模块

来自分类Dev

为每个模块组件重复模块名称

来自分类Dev

检查所需的模块是否为内置模块

来自分类Dev

Pyinstaller 为自己创建的模块导入模块

来自分类Dev

将变量设置为模块

来自分类Dev

模块存储重置为状态

来自分类Dev

为 LMS 设计测验模块

来自分类Dev

在JBoss EAP 6中将WMQ资源适配器部署为模块

来自分类Dev

在 Webstorm 中为我的自定义 npm 模块(ES6/Babel)自动完成

来自分类Dev

ES6中的模块模式错误(扩展)

来自分类Dev

如何加载定义为内部模块(TSD)的外部TypeScript模块

来自分类Dev

为JellyRefreshLayout模块导入新的Android模块失败

来自分类Dev

如何将Python模块与Extras打包为默认模块?

来自分类Dev

如何以编程方式知道模块是否为核心模块?

来自分类Dev

为maven多模块项目中的模块创建jar

来自分类Dev

找不到模块错误,因为路径被解释为模块

来自分类Dev

具有子模块的JavaScript模块模式交叉访问还是更好的模式?

来自分类Dev

带有子模块的JavaScript模块模式可以交叉访问还是更好的模式?

来自分类Dev

excel xlwings_udfs模块为空

来自分类Dev

为PowerShellGet创建纯Powershell Nuget模块

来自分类Dev

IIS URL重写模块URL为小写

Related 相关文章

热门标签

归档