我有一个Jest测试,用于检查包含货币的输入字段的值。该数字的格式使用 global.Intl.NumberFormat ,如下所示:
const formatter = new global.Intl.NumberFormat(locale, config);
区域设置设置为 nl-NL 且配置为
{ style: 'decimal',
currency: 'EUR',
minimumFractionDigits: 2,
maximumFractionDigits: 2 }
当我在测试中模拟输入时,我得到美国格式的数字,即使在我的浏览器中它工作得很好。 例如,如果我这样做
input.simulate('change', { target: { value: '5000' } });
我会得到'5,000.00'格式,对于欧元我应该得到'5.000,00'。 它执行格式化,但不适用于正确的语言环境。 我想知道Jest是否在为我嘲笑某些东西,如果是这样,我怎么能把它关掉呢?任何线索都将受到高度赞赏。
答案 0 :(得分:2)
您需要安装https://www.npmjs.com/package/full-icu才能在Node或Test环境中包括所有语言环境。浏览器中包括所有语言环境,但在Node中默认情况下仅加载英语。
更多信息:https://nodejs.org/api/intl.html。
安装软件包后,调整您的 package.json 脚本:
import Landing from './components/LandingPage.vue'
import Home from './components/HomePage.vue'
import Navbar from './components/Navbar.vue'
import Forum from './components/Forum.vue'
const router = new VueRouter({
mode: 'history',
routes: [
{
path: '/',
name: 'home',
component: Landing,
meta: {
requiresVisitor: true,
}
},
{
path: '/main',
name: 'main',
components: {
nav: Navbar,
con: Home
},
meta: {
requiresAuth: true,
}
},
{
path: '/forum',
name: 'forum',
components: {
nav: Navbar,
con: Forum
},
meta: {
requiresAuth: true,
}
}
],
});
router.beforeEach((to, from, next) => {
if (to.matched.some(record => record.meta.requiresAuth)) {
if (!store.getters.loggedIn) {
next({
name: 'home',
})
} else {
next()
}
} else if (to.matched.some(record => record.meta.requiresVisitor)) {
if (store.getters.loggedIn) {
next({
name: 'main',
})
} else {
next()
}
} else {
next()
}
})
const app = new Vue({
el: '#app',
components: { Home, Landing, Navbar, Forum },
router,
store,
});
您可能还需要更改由节点
"test": "NODE_ICU_DATA=node_modules/full-icu jest"
执行的脚本,否则 NumberFormat 在客户端和服务器上的行为可能会有所不同。