Skip to content

Commit cf7e05c

Browse files
committed
e2e tests
1 parent e710697 commit cf7e05c

File tree

8 files changed

+112
-27
lines changed

8 files changed

+112
-27
lines changed

README.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
# babel-plugin-react-directives
2-
A babel plugin that provides some directives for react, similar to directive of vue.
2+
A babel plugin that provides some directives for react(JSX), similar to directive of vue.
33

44

55
[![Travis (.org) branch](https://img.shields.io/travis/peakchen90/babel-plugin-react-directives/master.svg)](https://travis-ci.org/peakchen90/babel-plugin-react-directives)
66
[![Codecov](https://img.shields.io/codecov/c/github/peakchen90/babel-plugin-react-directives.svg)](https://codecov.io/gh/peakchen90/babel-plugin-react-directives)
77
[![npm](https://img.shields.io/npm/v/babel-plugin-react-directives.svg)](https://www.npmjs.com/package/babel-plugin-react-directives)
88
[![GitHub](https://img.shields.io/github/license/mashape/apistatus.svg)](https://github.com/peakchen90/babel-plugin-react-directives/blob/master/LICENSE)
9-
[![npm](https://img.shields.io/npm/dt/babel-plugin-react-directives.svg)](https://www.npmjs.com/package/babel-plugin-react-directives)
109

1110

1211
## Usage

test/e2e/specs/Todo.js

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/* eslint-disable max-classes-per-file, react/prop-types */
2+
/* eslint-disable no-undef, no-unused-vars */
3+
4+
import React from 'react';
5+
6+
export default class Todo extends React.Component {
7+
constructor(props) {
8+
super(props);
9+
this.state = {
10+
searchText: '',
11+
list: []
12+
};
13+
}
14+
15+
onAdd() {
16+
const { list, searchText } = this.state;
17+
this.setState((prevState) => ({
18+
list: list.concat(searchText)
19+
}));
20+
}
21+
22+
onRemove(index) {
23+
const { list } = this.state;
24+
this.setState({
25+
list: list.filter((_, i) => i !== index)
26+
});
27+
}
28+
29+
render() {
30+
const { searchText, list } = this.state;
31+
32+
return (
33+
<div>
34+
<input className="input" type="text" x-model={searchText}/>
35+
<button className="add" onClick={this.onAdd.bind(this)}>Add</button>
36+
<button x-show={list.length > 0} className="clear">Clear</button>
37+
38+
<ul className="todo-list">
39+
<li
40+
x-for={(item, index) in list}
41+
x-if={!searchText || item.indexOf(searchText) !== -1}
42+
key={item}
43+
className="todo-item"
44+
>
45+
<div>
46+
<span className="todo-text">{item}</span>
47+
<a className="remove" onClick={this.onRemove.bind(this, index)}>remove</a>
48+
</div>
49+
</li>
50+
</ul>
51+
</div>
52+
);
53+
}
54+
}

test/e2e/specs/for.test.js

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,12 @@ import React from 'react';
22
import { shallow } from 'enzyme';
33
import { DemoFor } from './Demo';
44

5-
describe('for', () => {
5+
describe('directive: for', () => {
66
test('traverse list', () => {
77
const list = [
8-
{
9-
id: 'a',
10-
name: 'Alice'
11-
},
12-
{
13-
id: 'b',
14-
name: 'Bob'
15-
},
16-
{
17-
id: 'c',
18-
name: 'Cindy'
19-
}
8+
{ id: 'a', name: 'Alice' },
9+
{ id: 'b', name: 'Bob' },
10+
{ id: 'c', name: 'Cindy' }
2011
];
2112

2213
const wrapper = shallow(<DemoFor list={list}/>);

test/e2e/specs/if.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { shallow } from 'enzyme';
33
import { setStatePromisify } from '../util';
44
import { DemoIf } from './Demo';
55

6-
describe('if & else-if & else', () => {
6+
describe('directive: if & else-if & else', () => {
77
const wrapper = shallow(<DemoIf/>);
88

99
test('if', async () => {

test/e2e/specs/model.test.js

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,24 @@ import React from 'react';
22
import { mount } from 'enzyme';
33
import { DemoModel1, DemoModel2, DemoModel3 } from './Demo';
44

5-
describe('model', () => {
5+
describe('directive: model', () => {
66
test('in class', () => {
77
const wrapper = mount(<DemoModel1/>);
8-
wrapper.find('input').simulate('change', {
9-
target: { value: 'new value' }
10-
});
8+
wrapper.find('input').simulate('change', { target: { value: 'new value' } });
119
expect(wrapper.find('.text').text()).toBe('new value');
1210
expect(wrapper.find('.extra').text()).toBe('B');
1311
});
1412

1513
test('use hook', () => {
1614
const wrapper = mount(<DemoModel2/>);
17-
wrapper.find('input').simulate('change', {
18-
target: { value: 'new value' }
19-
});
15+
wrapper.find('input').simulate('change', { target: { value: 'new value' } });
2016
expect(wrapper.find('.text').text()).toBe('new value');
2117
expect(wrapper.find('.extra').text()).toBe('foo');
2218
});
2319

2420
test('custom onChange event', () => {
2521
const wrapper = mount(<DemoModel3/>);
26-
wrapper.find('input').simulate('change', {
27-
target: { value: 'custom value' }
28-
});
22+
wrapper.find('input').simulate('change', { target: { value: 'custom value' } });
2923
expect(wrapper.find('.text').text()).toBe('custom value');
3024
});
3125
});

test/e2e/specs/show.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { shallow } from 'enzyme';
33
import { setStatePromisify } from '../util';
44
import { DemoShow } from './Demo';
55

6-
describe('show', () => {
6+
describe('directive: show', () => {
77
const wrapper = shallow(<DemoShow/>);
88

99
test('show', async () => {

test/e2e/specs/todo.test.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import React from 'react';
2+
import { mount } from 'enzyme';
3+
// import { setStatePromisify } from '../util';
4+
import Todo from './Todo';
5+
6+
describe('Todo Component', () => {
7+
const wrapper = mount(<Todo/>);
8+
9+
test('add todo', () => {
10+
wrapper.find('.input').simulate('change', { target: { value: 'First Todo' } });
11+
wrapper.find('.add').simulate('click');
12+
expect(wrapper.find('.todo-item .todo-text').at(0).text()).toBe('First Todo');
13+
expect(wrapper.find('.clear').prop('style').display).toBe(undefined);
14+
});
15+
16+
test('search todo', () => {
17+
wrapper.find('.input').simulate('change', { target: { value: 'Second Todo' } });
18+
wrapper.find('.add').simulate('click');
19+
20+
wrapper.find('.input').simulate('change', { target: { value: 'First' } });
21+
expect(wrapper.find('.todo-item .todo-text').length).toBe(1);
22+
expect(wrapper.find('.todo-item .todo-text').at(0).text()).toBe('First Todo');
23+
});
24+
25+
test('clear todo', () => {
26+
wrapper.find('.input').simulate('change', { target: { value: '' } });
27+
expect(wrapper.find('.todo-item .todo-text').length).toBe(2);
28+
29+
wrapper.find('.todo-item .remove').at(0).simulate('click');
30+
expect(wrapper.find('.todo-item .todo-text').length).toBe(1);
31+
32+
wrapper.find('.todo-item .remove').at(0).simulate('click');
33+
expect(wrapper.find('.todo-item .todo-text').length).toBe(0);
34+
expect(wrapper.find('.clear').prop('style').display).toBe('none');
35+
});
36+
});

test/e2e/util.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,14 @@ export function setStatePromisify(wrapper, val) {
99
wrapper.setState(val, resolve);
1010
});
1111
}
12+
13+
/**
14+
* 等待
15+
* @param ms
16+
* @return {Promise<unknown>}
17+
*/
18+
export function sleep(ms) {
19+
return new Promise((resolve) => {
20+
setTimeout(resolve, ms);
21+
});
22+
}

0 commit comments

Comments
 (0)