feat: 加入jest
This commit is contained in:
parent
41112daecb
commit
5bd8f76f5a
|
@ -0,0 +1,40 @@
|
||||||
|
# Javascript Node CircleCI 2.0 configuration file
|
||||||
|
#
|
||||||
|
# Check https://circleci.com/docs/2.0/language-javascript/ for more details
|
||||||
|
#
|
||||||
|
version: 2
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
branches:
|
||||||
|
only:
|
||||||
|
- master
|
||||||
|
- develop
|
||||||
|
docker:
|
||||||
|
# specify the version you desire here
|
||||||
|
- image: circleci/node:latest
|
||||||
|
|
||||||
|
# Specify service dependencies here if necessary
|
||||||
|
# CircleCI maintains a library of pre-built images
|
||||||
|
# documented at https://circleci.com/docs/2.0/circleci-images/
|
||||||
|
# - image: circleci/mongo:3.4.4
|
||||||
|
|
||||||
|
working_directory: ~/repo
|
||||||
|
|
||||||
|
parallelism: 1
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
|
||||||
|
- restore_cache:
|
||||||
|
key: dependency-cache-{{ checksum "package.json" }}
|
||||||
|
|
||||||
|
- run: yarn install --no-lockfile
|
||||||
|
- run: yarn add -W codecov
|
||||||
|
|
||||||
|
- save_cache:
|
||||||
|
key: dependency-cache-{{ checksum "package.json" }}
|
||||||
|
paths:
|
||||||
|
- ./node_modules
|
||||||
|
# run tests!
|
||||||
|
- run: yarn test --runInBand
|
||||||
|
- run: ./node_modules/.bin/codecov
|
|
@ -2,12 +2,14 @@ module.exports = {
|
||||||
"parser": '@typescript-eslint/parser',
|
"parser": '@typescript-eslint/parser',
|
||||||
"plugins": [
|
"plugins": [
|
||||||
'@typescript-eslint',
|
'@typescript-eslint',
|
||||||
|
'jest'
|
||||||
],
|
],
|
||||||
"env": {
|
"env": {
|
||||||
"browser": true,
|
"browser": true,
|
||||||
"es6": true,
|
"es6": true,
|
||||||
"node": true,
|
"node": true,
|
||||||
"commonjs": true
|
"commonjs": true,
|
||||||
|
"jest/globals": true
|
||||||
},
|
},
|
||||||
// 接入vue失败 暂且eslint 忽略vue文件
|
// 接入vue失败 暂且eslint 忽略vue文件
|
||||||
// "extends": [
|
// "extends": [
|
||||||
|
@ -80,7 +82,7 @@ module.exports = {
|
||||||
"prefer-const": ["error", {
|
"prefer-const": ["error", {
|
||||||
"destructuring": "any",
|
"destructuring": "any",
|
||||||
"ignoreReadBeforeAssign": false
|
"ignoreReadBeforeAssign": false
|
||||||
}]
|
}],
|
||||||
// "vue/script-indent": ["warn", 4, {
|
// "vue/script-indent": ["warn", 4, {
|
||||||
// "baseIndent": 1,
|
// "baseIndent": 1,
|
||||||
// "switchCase": 1
|
// "switchCase": 1
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
module.exports = {
|
||||||
|
preset: 'ts-jest/presets/js-with-babel',
|
||||||
|
testEnvironment: 'jsdom',
|
||||||
|
// roots: ['./src/'],
|
||||||
|
// testEnvironment: 'jest-environment-jsdom-global',
|
||||||
|
testEnvironmentOptions: {
|
||||||
|
userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1'
|
||||||
|
},
|
||||||
|
collectCoverage: true,
|
||||||
|
coverageDirectory: './coverage/',
|
||||||
|
// collectCoverageFrom: [
|
||||||
|
// 'packages/*/src/**/*.ts'],
|
||||||
|
verbose: false,
|
||||||
|
// testPathIgnorePatterns: ['<rootDir>/node_modules/', '<rootDir>/packages/simulator/'],
|
||||||
|
// coveragePathIgnorePatterns: ['<rootDir>/node_modules/', '<rootDir>/packages/simulator/'],
|
||||||
|
globals: {
|
||||||
|
__TEST__: true,
|
||||||
|
__VERSION__: require('./package.json').version,
|
||||||
|
ontouchstart: null
|
||||||
|
},
|
||||||
|
moduleFileExtensions: ['ts', 'tsx', 'js', 'json'],
|
||||||
|
moduleNameMapper: {
|
||||||
|
'^cnchar$': '<rootDir>/src/cnchar/main',
|
||||||
|
'^cnchar-types$': '<rootDir>/src/cnchar-types',
|
||||||
|
'^@cnchar-plugin/(.*?)$': '<rootDir>/src/cnchar/plugin/$1',
|
||||||
|
},
|
||||||
|
};
|
File diff suppressed because it is too large
Load Diff
|
@ -25,6 +25,7 @@
|
||||||
"publish": "node ./helper/publish.js",
|
"publish": "node ./helper/publish.js",
|
||||||
"lint": "eslint src --ext js",
|
"lint": "eslint src --ext js",
|
||||||
"test": "node test npm",
|
"test": "node test npm",
|
||||||
|
"jest": "jest",
|
||||||
"dev:docs": "vuepress dev vuepress",
|
"dev:docs": "vuepress dev vuepress",
|
||||||
"build:docs": "vuepress build vuepress && node ./helper/build-docs.js"
|
"build:docs": "vuepress build vuepress && node ./helper/build-docs.js"
|
||||||
},
|
},
|
||||||
|
@ -33,6 +34,7 @@
|
||||||
"@babel/preset-env": "^7.5.5",
|
"@babel/preset-env": "^7.5.5",
|
||||||
"@commitlint/cli": "^8.2.0",
|
"@commitlint/cli": "^8.2.0",
|
||||||
"@commitlint/config-conventional": "^8.2.0",
|
"@commitlint/config-conventional": "^8.2.0",
|
||||||
|
"@types/jest": "^24.0.11",
|
||||||
"@typescript-eslint/eslint-plugin": "^2.14.0",
|
"@typescript-eslint/eslint-plugin": "^2.14.0",
|
||||||
"@typescript-eslint/parser": "^2.14.0",
|
"@typescript-eslint/parser": "^2.14.0",
|
||||||
"@vuepress/plugin-back-to-top": "^1.0.0-rc.1",
|
"@vuepress/plugin-back-to-top": "^1.0.0-rc.1",
|
||||||
|
@ -44,6 +46,7 @@
|
||||||
"eslint": "^6.7.2",
|
"eslint": "^6.7.2",
|
||||||
"eslint-loader": "^3.0.3",
|
"eslint-loader": "^3.0.3",
|
||||||
"eslint-plugin-html": "^6.0.0",
|
"eslint-plugin-html": "^6.0.0",
|
||||||
|
"eslint-plugin-jest": "^24.1.3",
|
||||||
"eslint-plugin-vue": "^7.2.0",
|
"eslint-plugin-vue": "^7.2.0",
|
||||||
"gulp": "^4.0.2",
|
"gulp": "^4.0.2",
|
||||||
"gulp-babel": "^8.0.0",
|
"gulp-babel": "^8.0.0",
|
||||||
|
@ -51,8 +54,10 @@
|
||||||
"gulp-rename": "^1.4.0",
|
"gulp-rename": "^1.4.0",
|
||||||
"highlight.js": "^9.15.8",
|
"highlight.js": "^9.15.8",
|
||||||
"husky": "^3.1.0",
|
"husky": "^3.1.0",
|
||||||
|
"jest": "^24.7.1",
|
||||||
"less": "^3.9.0",
|
"less": "^3.9.0",
|
||||||
"less-loader": "^5.0.0",
|
"less-loader": "^5.0.0",
|
||||||
|
"ts-jest": "^24.0.2",
|
||||||
"ts-loader": "^6.2.1",
|
"ts-loader": "^6.2.1",
|
||||||
"typescript": "^3.7.4",
|
"typescript": "^3.7.4",
|
||||||
"vue": "^2.5.2",
|
"vue": "^2.5.2",
|
||||||
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
import EventEmitter from '.';
|
||||||
|
|
||||||
|
test('off指定事件', () => {
|
||||||
|
const eventEmitter = new EventEmitter();
|
||||||
|
const mockCallback = jest.fn();
|
||||||
|
eventEmitter.on('abc', mockCallback);
|
||||||
|
eventEmitter.off('abc', mockCallback);
|
||||||
|
eventEmitter.emit('abc');
|
||||||
|
expect(mockCallback.mock.calls.length).toBe(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
test('off所有对应的事件绑定', () => {
|
||||||
|
const eventEmitter = new EventEmitter();
|
||||||
|
const mockCallback = jest.fn();
|
||||||
|
eventEmitter.on('abc', mockCallback);
|
||||||
|
eventEmitter.off('abc');
|
||||||
|
eventEmitter.emit('abc');
|
||||||
|
expect(mockCallback.mock.calls.length).toBe(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
// test('once是否正确?', () => {
|
||||||
|
// const eventEmitter = new EventEmitter();
|
||||||
|
// const mockCallback = jest.fn();
|
||||||
|
// eventEmitter.once('abc', mockCallback);
|
||||||
|
// eventEmitter.emit('abc');
|
||||||
|
// eventEmitter.emit('abc');
|
||||||
|
// expect(mockCallback.mock.calls.length).toBe(1);
|
||||||
|
// });
|
||||||
|
|
||||||
|
|
||||||
|
// test('off不指定listener运行是否正确?', () => {
|
||||||
|
// const mockCallback = jest.fn();
|
||||||
|
// const eventEmitter = new EventEmitter();
|
||||||
|
// eventEmitter.on('abc', mockCallback);
|
||||||
|
// eventEmitter.off('abc');
|
||||||
|
// eventEmitter.emit('abc');
|
||||||
|
// expect(mockCallback.mock.calls.length).toBe(0);
|
||||||
|
// });
|
||||||
|
|
||||||
|
// test('连续绑定相同事件, 事件触发次数是否正确?', ()=>{
|
||||||
|
// const mockCallback = jest.fn();
|
||||||
|
// const eventEmitter = new EventEmitter();
|
||||||
|
// eventEmitter.on('abc', mockCallback);
|
||||||
|
// eventEmitter.on('abc', mockCallback);
|
||||||
|
// eventEmitter.emit('abc');
|
||||||
|
// expect(mockCallback.mock.calls.length).toBe(2);
|
||||||
|
// });
|
||||||
|
|
||||||
|
|
||||||
|
test('destory是否生效?', () => {
|
||||||
|
const mockCallback = jest.fn();
|
||||||
|
const eventEmitter = new EventEmitter();
|
||||||
|
eventEmitter.on('abc', mockCallback);
|
||||||
|
eventEmitter.destroy();
|
||||||
|
eventEmitter.emit('abc');
|
||||||
|
expect(mockCallback.mock.calls.length).toBe(0);
|
||||||
|
});
|
|
@ -0,0 +1,30 @@
|
||||||
|
import AnyTouch from '@any-touch/core';
|
||||||
|
import {GestureSimulator, sleep} from '@any-touch/simulator';
|
||||||
|
export function create () {
|
||||||
|
AnyTouch.removeUse();
|
||||||
|
const el = document.createElement('div');
|
||||||
|
const at = new AnyTouch(el);
|
||||||
|
const gs = new GestureSimulator(el);
|
||||||
|
const mouse = new GestureSimulator(el, {device: 'mouse'});
|
||||||
|
const mockCB = jest.fn();
|
||||||
|
const {mock} = mockCB;
|
||||||
|
const mockCalls = mock.calls;
|
||||||
|
const {dispatchTouchStart, dispatchTouchCancel, dispatchTouchEnd, dispatchTouchMove} = gs;
|
||||||
|
return {
|
||||||
|
GestureSimulator,
|
||||||
|
dispatchTouchStart,
|
||||||
|
dispatchTouchCancel,
|
||||||
|
dispatchTouchEnd,
|
||||||
|
dispatchTouchMove,
|
||||||
|
gs,
|
||||||
|
mouse,
|
||||||
|
touch: gs,
|
||||||
|
at,
|
||||||
|
el,
|
||||||
|
mockCB,
|
||||||
|
mock,
|
||||||
|
AnyTouch,
|
||||||
|
sleep,
|
||||||
|
mockCalls
|
||||||
|
};
|
||||||
|
}
|
|
@ -17,13 +17,20 @@
|
||||||
"removeComments": false,
|
"removeComments": false,
|
||||||
"jsx": "preserve",
|
"jsx": "preserve",
|
||||||
"lib": ["esnext", "dom"],
|
"lib": ["esnext", "dom"],
|
||||||
// "types": ["jest", "puppeteer", "node"],
|
// "types": ["jest", "node"],
|
||||||
"rootDir": ".",
|
"rootDir": ".",
|
||||||
// "paths": {
|
// "paths": {
|
||||||
// "@vue/*": ["packages/*/src"]
|
// "@vue/*": ["packages/*/src"]
|
||||||
// }
|
// },
|
||||||
|
"paths": {
|
||||||
|
"cnchar": ["src/cnchar/main"],
|
||||||
|
"cnchar-types": ["src/cnchar-types"],
|
||||||
|
"@cnchar-plugin/*": ["src/cnchar/plugin/*"],
|
||||||
|
"@testUtils":["testUtils"]
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"include": [
|
"include": [
|
||||||
|
"testUtils",
|
||||||
"./src/**/*"
|
"./src/**/*"
|
||||||
],
|
],
|
||||||
"exclude": [
|
"exclude": [
|
||||||
|
|
Loading…
Reference in New Issue