/* 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 分钟开始, 二月至十一月') }) })