Testing overview 

Какие

  • unit - 1/3 функционала
  • интеграционные  - важные связи
  • функциональные - на устоявшийся функционал

facebook/jest

Airbnb/enzyme

import React from 'react';
import { shallow } from 'enzyme';

import MyComponent from './MyComponent';
import Foo from './Foo';

describe('<MyComponent />', () => {
  it('renders three <Foo /> components', () => {
    const wrapper = shallow(<MyComponent />);
    expect(wrapper.find(Foo)).to.have.lengthOf(3);
  });

  it('renders children when passed in', () => {
    const wrapper = shallow((
      <MyComponent>
        <div className="unique" />
      </MyComponent>
    ));
    expect(wrapper.contains(<div className="unique" />)).to.equal(true);
  });

  it('simulates click events', () => {
    const onButtonClick = sinon.spy();
    const wrapper = shallow(<Foo onButtonClick={onButtonClick} />);
    wrapper.find('button').simulate('click');
    expect(onButtonClick).to.have.property('callCount', 1);
  });
});

Snapshot Testing with Jest

import React from 'react';
import Link from '../Link.react';
import renderer from 'react-test-renderer';

it('renders correctly', () => {
  const tree = renderer
    .create(<Link page="http://www.facebook.com">Facebook</Link>)
    .toJSON();
  expect(tree).toMatchSnapshot();
});
exports[`renders correctly 1`] = `
<a
  className="normal"
  href="http://www.facebook.com"
  onMouseEnter={[Function]}
  onMouseLeave={[Function]}
>
  Facebook
</a>
`;

visual regression (screenshots) testing 

 

Algoritm

Example

result of test execution

module.exports = {
  'Demo test Google' : function (browser) {
    browser
      .url('http://www.google.com')
      .waitForElementVisible('body', 1000)
      .setValue('input[type=text]', 'nightwatch')
      .waitForElementVisible('button[name=btnG]', 1000)
      .click('button[name=btnG]')
      .pause(1000)
      .assert.containsText('#main', 'Night Watch')
      .end();
  }
};

Советы

  • Тестируем старый функционал и популярные компоненты в первую очередь
  • Функциональные тесты - тестировщику
  • Искать методы борьбы с зависимостями
  • Snapshots тестирование это не хорошо
  • Screenshots тестирование это хорошо
  • Performance testing  
  • Monkey testing

PageSpeed Insights

gremlins.js

reading list

deck

By Denis Bogush

deck

  • 97