prefer-es6-class.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. /**
  2. * @fileoverview Prefer es6 class instead of createClass for React Component
  3. * @author Dan Hamilton
  4. */
  5. 'use strict';
  6. // ------------------------------------------------------------------------------
  7. // Requirements
  8. // ------------------------------------------------------------------------------
  9. const rule = require('../../../lib/rules/prefer-es6-class');
  10. const RuleTester = require('eslint').RuleTester;
  11. const parserOptions = {
  12. ecmaVersion: 2018,
  13. sourceType: 'module',
  14. ecmaFeatures: {
  15. jsx: true
  16. }
  17. };
  18. require('babel-eslint');
  19. // ------------------------------------------------------------------------------
  20. // Tests
  21. // ------------------------------------------------------------------------------
  22. const ruleTester = new RuleTester({parserOptions});
  23. ruleTester.run('prefer-es6-class', rule, {
  24. valid: [{
  25. code: `
  26. class Hello extends React.Component {
  27. render() {
  28. return <div>Hello {this.props.name}</div>;
  29. }
  30. }
  31. Hello.displayName = 'Hello'
  32. `
  33. }, {
  34. code: `
  35. export default class Hello extends React.Component {
  36. render() {
  37. return <div>Hello {this.props.name}</div>;
  38. }
  39. }
  40. Hello.displayName = 'Hello'
  41. `
  42. }, {
  43. code: `
  44. var Hello = "foo";
  45. module.exports = {};
  46. `
  47. }, {
  48. code: `
  49. var Hello = createReactClass({
  50. render: function() {
  51. return <div>Hello {this.props.name}</div>;
  52. }
  53. });
  54. `,
  55. options: ['never']
  56. }, {
  57. code: `
  58. class Hello extends React.Component {
  59. render() {
  60. return <div>Hello {this.props.name}</div>;
  61. }
  62. }
  63. `,
  64. options: ['always']
  65. }],
  66. invalid: [{
  67. code: `
  68. var Hello = createReactClass({
  69. displayName: 'Hello',
  70. render: function() {
  71. return <div>Hello {this.props.name}</div>;
  72. }
  73. });
  74. `,
  75. errors: [{
  76. message: 'Component should use es6 class instead of createClass'
  77. }]
  78. }, {
  79. code: `
  80. var Hello = createReactClass({
  81. render: function() {
  82. return <div>Hello {this.props.name}</div>;
  83. }
  84. });
  85. `,
  86. options: ['always'],
  87. errors: [{
  88. message: 'Component should use es6 class instead of createClass'
  89. }]
  90. }, {
  91. code: `
  92. class Hello extends React.Component {
  93. render() {
  94. return <div>Hello {this.props.name}</div>;
  95. }
  96. }
  97. `,
  98. options: ['never'],
  99. errors: [{
  100. message: 'Component should use createClass instead of es6 class'
  101. }]
  102. }]
  103. });