taro-s4s
Version:
Nerv-multi多端开发解决方案
278 lines (244 loc) • 8.31 kB
JavaScript
/* eslint-disable */
import Taro from '../index.js'
import 'jest-dom/extend-expect'
Taro.initNativeApi(Taro)
describe('actionSheet', () => {
test('options.itemList should be Array', () => {
const success = jest.fn()
const fail = jest.fn()
const complete = jest.fn()
expect.assertions(4)
Taro.showActionSheet({
itemList: 'abc',
success,
fail,
complete
})
.catch(err => {
const excpectErrObj = { errMsg: 'showActionSheet:fail parameter error: parameter.itemList should be Array instead of String' }
expect(success.mock.calls.length).toBe(0)
expect(fail).toHaveBeenCalledWith(excpectErrObj)
expect(complete).toHaveBeenCalledWith(excpectErrObj)
expect(err).toEqual(excpectErrObj)
})
})
test('options.itemList should have at least 1 item', () => {
const success = jest.fn()
const fail = jest.fn()
const complete = jest.fn()
expect.assertions(4)
Taro.showActionSheet({
itemList: [],
success,
fail,
complete
})
.catch(err => {
const excpectErrObj = { errMsg: 'showActionSheet:fail parameter error: parameter.itemList should have at least 1 item' }
expect(success.mock.calls.length).toBe(0)
expect(fail).toHaveBeenCalledWith(excpectErrObj)
expect(complete).toHaveBeenCalledWith(excpectErrObj)
expect(err).toEqual(excpectErrObj)
})
})
test('options.itemList should not be large than 6', () => {
const success = jest.fn()
const fail = jest.fn()
const complete = jest.fn()
expect.assertions(4)
Taro.showActionSheet({
itemList: ['a', 'b', 'c', 'd', 'e', 'f', 'g'],
success,
fail,
complete
})
.catch(err => {
const excpectErrObj = { errMsg: 'showActionSheet:fail parameter error: parameter.itemList should not be large than 6' }
expect(success.mock.calls.length).toBe(0)
expect(fail).toHaveBeenCalledWith(excpectErrObj)
expect(complete).toHaveBeenCalledWith(excpectErrObj)
expect(err).toEqual(excpectErrObj)
})
})
test('options.itemList should not be large than 6', () => {
const success = jest.fn()
const fail = jest.fn()
const complete = jest.fn()
expect.assertions(4)
Taro.showActionSheet({
itemList: ['a', 1, 'c'],
success,
fail,
complete
})
.catch(err => {
const excpectErrObj = { errMsg: 'showActionSheet:fail parameter error: parameter.itemList[1] should be String instead of Number' }
expect(success.mock.calls.length).toBe(0)
expect(fail).toHaveBeenCalledWith(excpectErrObj)
expect(complete).toHaveBeenCalledWith(excpectErrObj)
expect(err).toEqual(excpectErrObj)
})
})
test('options.itemColor should be String', () => {
const success = jest.fn()
const fail = jest.fn()
const complete = jest.fn()
expect.assertions(4)
Taro.showActionSheet({
itemList: ['a'],
itemColor: 123,
success,
fail,
complete
})
.catch(err => {
const excpectErrObj = { errMsg: 'showActionSheet:fail parameter error: parameter.itemColor should be String instead of Number' }
expect(success.mock.calls.length).toBe(0)
expect(fail).toHaveBeenCalledWith(excpectErrObj)
expect(complete).toHaveBeenCalledWith(excpectErrObj)
expect(err).toEqual(excpectErrObj)
})
})
test('basic test', done => {
const itemA = 'A'
const itemB = 'B'
const itemC = 'C'
const success = jest.fn()
const fail = jest.fn()
const complete = jest.fn()
Taro.showActionSheet({
itemList: [itemA, itemB, itemC],
success,
fail,
complete
})
.then(res => {
const expectObj = { errMsg: 'showActionSheet:ok', tapIndex: 1 }
expect(success).toHaveBeenCalledWith(expectObj)
expect(fail.mock.calls.length).toBe(0)
expect(complete).toHaveBeenCalledWith(expectObj)
expect(res).toEqual(expectObj)
done()
})
const actionSheet = document.body.lastChild
expect(actionSheet.childNodes.length).toBe(2)
expect(actionSheet).not.toBeVisible()
const mask = actionSheet.firstChild
const list = actionSheet.lastChild.firstChild
const cancel = actionSheet.lastChild.lastChild
expect(list.childNodes.length).toBe(3)
expect(list.childNodes[0]).toHaveTextContent(itemA)
expect(list.childNodes[1]).toHaveTextContent(itemB)
expect(list.childNodes[2]).toHaveTextContent(itemC)
setTimeout(() => {
expect(actionSheet).toBeVisible()
expect(mask).toBeVisible()
list.childNodes[1].click()
}, 200)
})
test('should hide actionSheet when cancel was clicked', done => {
const success = jest.fn()
const fail = jest.fn()
const complete = jest.fn()
Taro.showActionSheet({
itemList: ['A', 'B', 'C'],
success,
fail,
complete
})
.catch(res => {
const expectObj = { errMsg: 'showActionSheet:fail cancel' }
expect(success.mock.calls.length).toBe(0)
expect(fail).toHaveBeenCalledWith(expectObj)
expect(complete).toHaveBeenCalledWith(expectObj)
expect(res).toEqual(expectObj)
expect(actionSheet).not.toBeVisible()
done()
})
const actionSheet = document.body.lastChild
const cancel = actionSheet.lastChild.lastChild
setTimeout(() => {
expect(actionSheet).toBeVisible()
cancel.click()
}, 200)
})
test('should hide actionSheet when mask was clicked', done => {
const success = jest.fn()
const fail = jest.fn()
const complete = jest.fn()
Taro.showActionSheet({
itemList: ['A', 'B', 'C'],
success,
fail,
complete
})
.catch(res => {
const expectObj = { errMsg: 'showActionSheet:fail cancel' }
expect(success.mock.calls.length).toBe(0)
expect(fail).toHaveBeenCalledWith(expectObj)
expect(complete).toHaveBeenCalledWith(expectObj)
expect(res).toEqual(expectObj)
expect(actionSheet).not.toBeVisible()
done()
})
const actionSheet = document.body.lastChild
const mask = actionSheet.firstChild
setTimeout(() => {
expect(actionSheet).toBeVisible()
mask.click()
}, 200)
})
test('should set itemColor successful', () => {
Taro.showActionSheet({
itemList: ['A', 'B', 'C'],
itemColor: 'red'
})
const actionSheet = document.body.lastChild
const list = actionSheet.lastChild.firstChild
expect(list).toHaveStyle('color: red')
})
test('should update list item when only item content changed', () => {
const itemA = 'A'
const itemB = 'E'
const itemC = 'P'
Taro.showActionSheet({
itemList: [itemA, itemB, itemC]
})
const actionSheet = document.body.lastChild
const list = actionSheet.lastChild.firstChild
expect(list.childNodes.length).toBe(3)
expect(list.childNodes[0]).toHaveTextContent(itemA)
expect(list.childNodes[1]).toHaveTextContent(itemB)
expect(list.childNodes[2]).toHaveTextContent(itemC)
})
test('should update list item when itemList get longer', () => {
const itemA = 'A'
const itemB = 'E'
const itemC = 'P'
const itemD = 'M'
const itemE = 'N'
Taro.showActionSheet({
itemList: [itemA, itemB, itemC, itemD, itemE]
})
const actionSheet = document.body.lastChild
const list = actionSheet.lastChild.firstChild
expect(list.childNodes.length).toBe(5)
expect(list.childNodes[0]).toHaveTextContent(itemA)
expect(list.childNodes[1]).toHaveTextContent(itemB)
expect(list.childNodes[2]).toHaveTextContent(itemC)
expect(list.childNodes[3]).toHaveTextContent(itemD)
expect(list.childNodes[4]).toHaveTextContent(itemE)
})
test('should update list item when only itemList get shorter', () => {
const itemA = 'U'
const itemB = 'I'
Taro.showActionSheet({
itemList: [itemA, itemB]
})
const actionSheet = document.body.lastChild
const list = actionSheet.lastChild.firstChild
expect(list.childNodes.length).toBe(2)
expect(list.childNodes[0]).toHaveTextContent(itemA)
expect(list.childNodes[1]).toHaveTextContent(itemB)
})
})