使用Vue CLI和Jest。在我的packages.config中,我有:
"test:unit": "vue-cli-service test:unit",
经过反复试验,我发现这会导致加载.env.test环境变量文件,并将NODE_ENV变量设置为生产。这是我正在测试的基本测试:
import { mount } from '@vue/test-utils'
import Home from './Home'
describe('Home', () => {
test('is a Vue instance', () => {
console.log('=================================================');
console.log('ENVVAR=' + process.env.ENVVAR);
console.log('NODE_ENV=' + process.env.NODE_ENV);
console.log('=================================================');
const wrapper = mount(Home);
expect(wrapper.isVueInstance()).toBeTruthy();
});
});
不幸的是,vue-cli-service在使用test:unit时没有--mode选项。我需要获取vue-cli-service来加载特定环境的变量,还需要将NODE_ENV设置为特定的值,例如:
"test:unit": "vue-cli-service test:unit --mode foo",
[如果存在,则需要它来加载.env.foo环境变量。理想情况下,它也会将NODE_ENV也更改为foo,但这无关紧要。
如果我将packages.config更改为:
"test:unit": "set NODE_ENV=foo&&vue-cli-service test:unit",
它确实将NODE_ENV设置为foo,但是vue-cli-service坚持加载.env.test而不是.env.foo。此外,我收到了很多这样的错误:
console.error node_modules/vue/dist/vue.runtime.common.dev.js:621
[Vue warn]: Unknown custom element: <v-app> - did you register the component correctly? For recursive components, make sure to provide the "name" option.
found in
---> <App>
<Root>
那么有什么方法可以获取vue-cli-service来加载特定的环境变量,而不是.env.test?
谢谢
为了解决这个问题,我最终甚至没有使用vue-cli-service。
在我的packages.json中的脚本下:
"test:unit": "./node_modules/.bin/jest",
然后我创建了这个setup.js文件:
process.env.NODE_ENV='foo';
var dotenv = require("dotenv");
// Load in reverse order (variables in second file will not override variables in first)
dotenv.config({ path: '.env.foo' });
dotenv.config({ path: '.env' });
并在我的jest.config.js中引用了它:
setupFiles: ["./src/.jest/setup.js"],
现在将加载适当的环境变量,并且将NODE_ENV设置为'foo'(在本示例中)。