使用 jest 测试 nuxt.js 应用程序时访问 `process.env` 属性

Posted

技术标签:

【中文标题】使用 jest 测试 nuxt.js 应用程序时访问 `process.env` 属性【英文标题】:Access `process.env` property when testing nuxt.js app with jest 【发布时间】:2019-07-23 13:55:35 【问题描述】:

我想用 Jest 为我的 Nuxt.js 应用程序编写单元测试。但是我的一些组件使用在nuxt.config.js 文件中声明的process.env 属性。当我运行我的测试时,我收到了这个错误:

测试文件示例:

import Config from "../nuxt.config"
import  mount  from "@vue/test-utils"
import CleanMapButton from "../components/UI/buttons/CleanMapButton.vue"

beforeAll(() => 
  process.env = Config.env
)

describe("Clean map button tests", () => 
  it ('Always true test', () => 
    expect(true).toBe(true)
  )
)

【问题讨论】:

【参考方案1】:

Imports are hoisted 所以import 语句都在process.env 之前运行,在beforeAll 中设置。

如果import-ed 模块需要设置全局变量,则必须在测试开始运行之前设置它,方法是在设置模块中设置它并配置Jest 以运行该设置模块使用 setupFilesAfterEnv 之类的东西。

另一方面,调用require 会在需要时运行代码,因此另一种方法是重构您的测试代码以在beforeAll 设置后调用require('../components/UI/buttons/CleanMapButton.vue') process.env.

【讨论】:

【参考方案2】:

你可以在 beforeAll 中设置它们

beforeAll(() => 
  process.env = Object.assign(process.env,  get_settings: 'get_settings' );
);

【讨论】:

我已经添加了我的测试文件源。看起来这个错误是在 beforeAll 方法调用之前强制执行的。我想当第三次导入执行时。

以上是关于使用 jest 测试 nuxt.js 应用程序时访问 `process.env` 属性的主要内容,如果未能解决你的问题,请参考以下文章

使用 Jest 测试 NUXT.js 和 Vue.js 应用程序。获取“在 mapState() 中找不到 [vuex] 模块命名空间”和“[vuex] 未知操作类型”

Nuxt.js 中的 Jest 全局插件

在 Nuxt JS 中导入 SVG 时,Jest 中出现“[Vue 警告]:无效的组件定义”

javascript nuxt.js项目中的Jest&vue-test-utils配置

如何在 Vue.js/Nuxt.js 中为 RepositoryFactory 编写测试

如何测试 nuxt.js asyncData 并获取钩子