/* global cy */
import { ObjectInterface } from 'script'
import VueCron from './index.vue'
const row: ObjectInterface = {
label: '',
type: 'infoVueCron',
model: 'setCron',
show: () => true
}
const modelData = {}
// 挂载组件
const mount = () => {
// 将一个间谍函数(cy.spy())赋值给row.methods属性
row.methods = cy.spy().as('changeHandler')
cy.mount(VueCron, {
props: {
row,
modelData
}
})
}
// 验证可正常保存结果
const saveDone = () => {
cy.get('.bottom .el-button').contains('保存').click()
cy.get('@changeHandler').should('have.been.called')
}
describe(' 定时器基础测试', () => {
it('保存新cron表达式', () => {
mount()
cy.get('.el-input--default').click()
cy.get('.bottom .value').should('have.text', '0 1/5 * * * ? *')
saveDone()
cy.get('.el-input__inner').should('have.value', '每隔 5 分钟, 在每小时的第 1 分钟开始')
})
it('配置新cron表达式,点击取消,原表达式不变', () => {
mount()
cy.get('.el-input--default').click()
cy.get('.bottom .value').should('have.text', '0 1/5 * * * ? *')
cy.get('#pane-0 > .tabBody > :nth-child(4) > .el-radio > .el-radio__label')
cy.get('.bottom .el-button').contains('关闭').click()
cy.get('.el-input__inner').should('have.value', '每隔 5 分钟, 在每小时的第 1 分钟开始')
})
})
describe(' 按分', () => {
it('设置为 每一分钟', () => {
mount()
cy.get('.el-input--default').click()
cy.get('#pane-0 > .tabBody > :nth-child(1) > .el-radio > .el-radio__label').click()
saveDone()
cy.get('.el-input__inner').should('have.value', '每分钟')
})
it('设置为 每隔..分执行 从..分开始', () => {
mount()
cy.get('.el-input--default').click()
cy.get('#pane-0 > .tabBody > :nth-child(2) > .el-radio > .el-radio__label').as('container')
cy.get('@container').find('div:nth-child(1) > span.el-input-number__increase').click()
cy.get('@container').find('div:nth-child(2) > span.el-input-number__increase').dblclick()
saveDone()
cy.get('.el-input__inner').should('have.value', '每隔 6 分钟, 在每小时的第 2 分钟开始')
})
it('设置为 具体分钟数', () => {
mount()
cy.get('.el-input--default').click()
// 获取具体分钟数下拉框
cy.get('#pane-0 > div > div:nth-child(3) > label > span.el-radio__label > div').as('multiSelect')
// 打开下拉框(模拟点击下拉框)
cy.get('@multiSelect').click()
// 下拉多选
cy.get('@multiSelect').find('.el-select-dropdown__item').eq(0).click()
cy.get('@multiSelect').find('.el-select-dropdown__item').eq(1).click()
cy.get('@multiSelect').find('.el-select-dropdown__item').eq(2).click()
cy.get('@multiSelect').find('.el-select-dropdown__item').eq(3).click()
// 关闭下拉框(模拟点击下拉框)
cy.get('@multiSelect').click()
saveDone()
cy.get('.el-input__inner').should('have.value', '在每小时的第 1, 2, 和 3 分钟')
})
it('设置为 周期从..到..分', () => {
mount()
// 打开设置
cy.get('.el-input--default').click()
// 周期从 设置
cy.get('#pane-0 > div > div:nth-child(4) > label > span.el-radio__label').as('container')
cy.get('@container').find('div:nth-child(1) > span.el-input-number__increase').click()
cy.get('@container').find('div:nth-child(2) > span.el-input-number__decrease').click()
// 判断 cron 表达式值是否正确
cy.get('.bottom .value').should('have.text', '0 2-58 * * * ? *')
saveDone()
cy.get('.el-input__inner').should('have.value', '在每小时的第 2 到 58 分钟')
})
})
describe(' 按时', () => {
it('设置为 每隔..小时执行 从..小时开始', () => {
mount()
// 打开设置
cy.get('.el-input--default').click()
// 选择 「时」
cy.get('#tab-1').click()
cy.get('#pane-1 > div > div:nth-child(2) > label > span.el-radio__label').as('container')
cy.get('@container').find('div:nth-child(1) > span.el-input-number__increase').click()
cy.get('@container').find('div:nth-child(2) > span.el-input-number__increase').click()
cy.get('.bottom .value').should('have.text', '0 1/5 2/6 * * ? *')
saveDone()
cy.get('.el-input__inner').should(
'have.value',
'每隔 5 分钟, 在每小时的第 1 分钟开始, 每隔 6 小时, 在上午 02:00开始'
)
})
it('设置为 具体小时数', () => {
mount()
// 打开设置
cy.get('.el-input--default').click()
// 选择 「时」
cy.get('#tab-1').click()
// 获取具体小时数下拉框
cy.get('#pane-1 > div > div:nth-child(3) > label > span.el-radio__label > div').as('multiSelect')
// 打开下拉框(模拟点击下拉框)
cy.get('@multiSelect').click()
// 下拉多选
cy.get('@multiSelect').find('.el-select-dropdown__item').eq(3).click()
cy.get('@multiSelect').find('.el-select-dropdown__item').eq(5).click()
cy.get('@multiSelect').find('.el-select-dropdown__item').eq(7).click()
cy.get('@multiSelect').find('.el-select-dropdown__item').eq(9).click()
// 关闭下拉框(模拟点击下拉框)
cy.get('@multiSelect').click()
cy.get('.bottom .value').should('have.text', '0 1/5 1,3,5,7,9 * * ? *')
saveDone()
cy.get('.el-input__inner').should(
'have.value',
'每隔 5 分钟, 在每小时的第 1 分钟开始, 在上午 01:00, 上午 03:00, 上午 05:00, 上午 07:00, 和 上午 09:00'
)
})
it('设置为 周期从..到..小时', () => {
mount()
// 打开设置
cy.get('.el-input--default').click()
// 选择 「时」
cy.get('#tab-1').click()
// 周期从 设置
cy.get('#pane-1 > div > div:nth-child(4) > label > span.el-radio__label').as('container')
cy.get('@container').find('div:nth-child(1) > span.el-input-number__increase').click()
cy.get('@container').find('div:nth-child(2) > span.el-input-number__decrease').click()
// // 判断 cron 表达式值是否正确
cy.get('.bottom .value').should('have.text', '0 1/5 1-22 * * ? *')
saveDone()
cy.get('.el-input__inner').should(
'have.value',
'每隔 5 分钟, 在每小时的第 1 分钟开始, 在 上午 01:00 和 下午 10:59 之间'
)
})
})
describe(' 按天', () => {
it('设置为 每一天', () => {
mount()
// 打开设置
cy.get('.el-input--default').click()
// 选择 「天」
cy.get('#tab-2').click()
cy.get('#pane-2 > .tabBody > :nth-child(1) > .el-radio > .el-radio__label').click()
cy.get('.bottom .value').should('have.text', '0 1/5 * * * ? *')
saveDone()
})
it('设置为 每隔...周执行 从星期?开始', () => {
mount()
// 打开设置
cy.get('.el-input--default').click()
// 选择 「天」
cy.get('#tab-2').click()
cy.get('#pane-2 > .tabBody > :nth-child(2) > .el-radio > .el-radio__label').as('container')
cy.get('@container').find('div.el-input-number.el-input-number--small > span.el-input-number__increase').click()
cy.get('@container').find('div.el-select.el-select--small').as('select')
cy.get('@select').click()
cy.get('@select').find('.el-select-dropdown__item').eq(1).click()
cy.get('.bottom .value').should('have.text', '0 1/5 * ? * 2/2 *')
saveDone()
})
it('设置为 每隔..天执行 从..天开始', () => {
mount()
// 打开设置
cy.get('.el-input--default').click()
// 选择 「天」
cy.get('#tab-2').click()
cy.get('#pane-2 > div > div:nth-child(3) > label > span.el-radio__label').as('container')
cy.get('@container').find('div:nth-child(1) > span.el-input-number__increase').click()
cy.get('@container').find('div:nth-child(2) > span.el-input-number__increase').click()
cy.get('.bottom .value').should('have.text', '0 1/5 * 2/2 * ? *')
saveDone()
})
it('设置为 具体星期几', () => {
mount()
// 打开设置
cy.get('.el-input--default').click()
// 选择 「天」
cy.get('#tab-2').click()
// 获取具体星期几下拉框
cy.get('#pane-2 > div > div:nth-child(4) > label > span.el-radio__label > div').as('multiSelect')
// 打开下拉框(模拟点击下拉框)
cy.get('@multiSelect').click()
// 下拉多选
cy.get('@multiSelect').find('.el-select-dropdown__item').eq(1).click()
cy.get('@multiSelect').find('.el-select-dropdown__item').eq(3).click()
// 关闭下拉框(模拟点击下拉框)
cy.get('@multiSelect').click()
cy.get('.bottom .value').should('have.text', '0 1/5 * ? * TUE,THU *')
saveDone()
})
it('设置为 具体天数', () => {
mount()
// 打开设置
cy.get('.el-input--default').click()
// 选择 「天」
cy.get('#tab-2').click()
// 获取具体星期几下拉框
cy.get('#pane-2 > div > div:nth-child(5) > label > span.el-radio__label > div').as('multiSelect')
// 打开下拉框(模拟点击下拉框)
cy.get('@multiSelect').click()
// 下拉多选
cy.get('@multiSelect').find('.el-select-dropdown__item').eq(1).click()
cy.get('@multiSelect').find('.el-select-dropdown__item').eq(2).click()
// 关闭下拉框(模拟点击下拉框)
cy.get('@multiSelect').click()
cy.get('.bottom .value').should('have.text', '0 1/5 * 1,2,3 * ? *')
saveDone()
})
it('设置为 月最后一天/最后一工作日', () => {
mount()
// 打开设置
cy.get('.el-input--default').click()
// 选择 「天」
cy.get('#tab-2').click()
cy.get(':nth-child(6) > .el-radio > .el-radio__label').click()
cy.get('.bottom .value').should('have.text', '0 1/5 * L * ? *')
cy.get(':nth-child(7) > .el-radio > .el-radio__label').click()
cy.get('.bottom .value').should('have.text', '0 1/5 * LW * ? *')
saveDone()
})
it('设置为 这个月最后一个星期几', () => {
mount()
// 打开设置
cy.get('.el-input--default').click()
// 选择 「天」
cy.get('#tab-2').click()
cy.get('#pane-2 > div > div:nth-child(8) > label > span.el-radio__label > div').as('select')
cy.get('@select').click()
cy.get('@select').find('.el-select-dropdown__item').eq(1).click()
cy.get('.bottom .value').should('have.text', '0 1/5 * 2L * ? *')
saveDone()
})
it('设置为 在本月底前', () => {
mount()
// 打开设置
cy.get('.el-input--default').click()
// 选择 「天」
cy.get('#tab-2').click()
cy.get(
'#pane-2 > div > div:nth-child(9) > label > span.el-radio__label > div > span.el-input-number__increase'
).click()
cy.get('.bottom .value').should('have.text', '0 1/5 * L-2 * ? *')
saveDone()
})
it('设置为 最近工作日...', () => {
mount()
// 打开设置
cy.get('.el-input--default').click()
// 选择 「天」
cy.get('#tab-2').click()
cy.get(
'#pane-2 > div > div:nth-child(10) > label > span.el-radio__label > div > span.el-input-number__increase'
).click()
cy.get('.bottom .value').should('have.text', '0 1/5 * 2w * ? *')
saveDone()
})
it('设置为 这个月的第..星期..个', () => {
mount()
// 打开设置
cy.get('.el-input--default').click()
// 选择 「天」
cy.get('#tab-2').click()
cy.get('#pane-2 > div > div:nth-child(11) > label > span.el-radio__label').as('container')
cy.get('@container').find('div.el-input-number.el-input-number--small > span.el-input-number__increase').click()
cy.get('@container').find('div.el-select.el-select--small').as('select')
cy.get('@select').click()
cy.get('@select').find('.el-select-dropdown__item').eq(1).click()
cy.get('.bottom .value').should('have.text', '0 1/5 * ? * 2#2 *')
saveDone()
})
})
describe(' 按月', () => {
it('设置为 每一月', () => {
mount()
// 打开设置
cy.get('.el-input--default').click()
// 选择 「月」
cy.get('#tab-3').click()
cy.get('#pane-3 > div > div:nth-child(1) > label > span.el-radio__label').click()
cy.get('.bottom .value').should('have.text', '0 1/5 * * * ? *')
saveDone()
cy.get('.el-input__inner').should('have.value', '每隔 5 分钟, 在每小时的第 1 分钟开始')
})
it('设置为 每隔..月执行 从..', () => {
mount()
// 打开设置
cy.get('.el-input--default').click()
// 选择 「月」
cy.get('#tab-3').click()
cy.get('#pane-3 > div > div:nth-child(2) > label > span.el-radio__label').as('container')
cy.get('@container').find('div:nth-child(1) > span.el-input-number__decrease').click()
cy.get('@container').find('div:nth-child(2) > span.el-input-number__increase').click()
cy.get('.bottom .value').should('have.text', '0 1/5 * * 2/4 ? *')
saveDone()
cy.get('.el-input__inner').should(
'have.value',
'每隔 5 分钟, 在每小时的第 1 分钟开始, 每隔 4 个月, 二月至十二月'
)
})
it('设置为 具体月数', () => {
mount()
// 打开设置
cy.get('.el-input--default').click()
// 选择 「月」
cy.get('#tab-3').click()
// 获取具体月数下拉框
cy.get('#pane-3 > div > div:nth-child(3) > label > span.el-radio__label > div').as('multiSelect')
// 打开下拉框(模拟点击下拉框)
cy.get('@multiSelect').click()
// 下拉多选
cy.get('@multiSelect').find('.el-select-dropdown__item').eq(0).click()
cy.get('@multiSelect').find('.el-select-dropdown__item').eq(2).click()
cy.get('@multiSelect').find('.el-select-dropdown__item').eq(4).click()
// 关闭下拉框(模拟点击下拉框)
cy.get('@multiSelect').click()
cy.get('.bottom .value').should('have.text', '0 1/5 * * 1,3,5 ? *')
saveDone()
cy.get('.el-input__inner').should(
'have.value',
'每隔 5 分钟, 在每小时的第 1 分钟开始, 仅于一月, 三月, 和 五月份'
)
})
it('设置为 具体月数', () => {
mount()
// 打开设置
cy.get('.el-input--default').click()
// 选择 「月」
cy.get('#tab-3').click()
cy.get('#pane-3 > div > div:nth-child(4) > label > span.el-radio__label').as('container')
cy.get('@container').find('div:nth-child(1) > span.el-input-number__increase').click()
cy.get('@container').find('div:nth-child(2) > span.el-input-number__decrease').click()
cy.get('.bottom .value').should('have.text', '0 1/5 * * 2-11 ? *')
saveDone()
cy.get('.el-input__inner').should('have.value', '每隔 5 分钟, 在每小时的第 1 分钟开始, 二月至十一月')
})
})