Cypress - 用 dayjs 替换 moment()

Cypress - replaceing moment() with dayjs

我在从已弃用的 Moment 转到 Cypress 中的 DayJS 时遇到了语言环境问题。

原来的 Moment() 用法:

public moment(): Moment {
    const moment = Cypress.moment();
    moment.locale("nb-NO");
    return moment;
}

const in2Months = moment().add(2, "months");

这很好用,例如“March”被“Mars”取代了。

但是,当尝试以与 days.js 相同的方式使用它时,区域设置没有改变:

public day() {        
    return dayjs().locale('nb-NO');
}

const in2Months = page.day().add(2, "months");

这里的结果仍然是“三月”。我试过只使用 'no' 作为语言环境,结果相同。

我在这里错过了什么?

更新: 根据以下答案:

import dayjs from "dayjs";
import 'dayjs/locale/nb'

const in2Months = dayjs().locale('nb').add(2, 'Month');

cy.log(in2monthstoString());

RESULT: Mon, 28 Mar 2022 12:39:29 GMT

不是本地格式。

此外,尝试 .month() 的任何变体,我总能找到月份数的结果。我不知道名字。

Days JS github readme所述,您必须导入您打算使用的国际化,默认情况下不会包含它。所以我写了一个简单的程序来检查这个并且它有效

const dayjs = require('dayjs')
import 'dayjs/locale/nb'

describe('SO Ques', () => {
  it('SO Ques', () => {
    cy.log(dayjs().locale('nb').add(2, 'Month').format('MMMM'))
  })
})

测试运行者:

所以你的程序应该是这样的:

const dayjs = require('dayjs')
import 'dayjs/locale/nb'

public day() {        
    return dayjs().locale('nb');
}
const in2Months = page.day().add(2, 'Month').format('MMMM');

您可以评估一个函数中的所有值,然后 return 它,然后像这样在您的测试中使用它:

function date() {
    return {
        day: dayjs().locale('nb').add(2, 'Month').format('DD'),
        month: dayjs().locale('nb').add(2, 'Month').format('MMMM'),
        year: dayjs().locale('nb').add(2, 'Month').format('YYYY'),
    };
}

date().day //28
date().month //mars
date().year //2022