使用 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 中导入 SVG 时,Jest 中出现“[Vue 警告]:无效的组件定义”
javascript nuxt.js项目中的Jest&vue-test-utils配置