no-find-dom-node.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. /**
  2. * @fileoverview Prevent usage of findDOMNode
  3. * @author Yannick Croissant
  4. */
  5. 'use strict';
  6. // ------------------------------------------------------------------------------
  7. // Requirements
  8. // ------------------------------------------------------------------------------
  9. const rule = require('../../../lib/rules/no-find-dom-node');
  10. const RuleTester = require('eslint').RuleTester;
  11. const parserOptions = {
  12. ecmaVersion: 2018,
  13. sourceType: 'module',
  14. ecmaFeatures: {
  15. jsx: true
  16. }
  17. };
  18. // ------------------------------------------------------------------------------
  19. // Tests
  20. // ------------------------------------------------------------------------------
  21. const ruleTester = new RuleTester({parserOptions});
  22. ruleTester.run('no-find-dom-node', rule, {
  23. valid: [{
  24. code: `
  25. var Hello = function() {};
  26. `
  27. }, {
  28. code: `
  29. var Hello = createReactClass({
  30. render: function() {
  31. return <div>Hello</div>;
  32. }
  33. });
  34. `
  35. }, {
  36. code: `
  37. var Hello = createReactClass({
  38. componentDidMount: function() {
  39. someNonMemberFunction(arg);
  40. this.someFunc = React.findDOMNode;
  41. },
  42. render: function() {
  43. return <div>Hello</div>;
  44. }
  45. });
  46. `
  47. }, {
  48. code: `
  49. var Hello = createReactClass({
  50. componentDidMount: function() {
  51. React.someFunc(this);
  52. },
  53. render: function() {
  54. return <div>Hello</div>;
  55. }
  56. });
  57. `
  58. }],
  59. invalid: [{
  60. code: `
  61. var Hello = createReactClass({
  62. componentDidMount: function() {
  63. React.findDOMNode(this).scrollIntoView();
  64. },
  65. render: function() {
  66. return <div>Hello</div>;
  67. }
  68. });
  69. `,
  70. errors: [{
  71. message: 'Do not use findDOMNode'
  72. }]
  73. }, {
  74. code: `
  75. var Hello = createReactClass({
  76. componentDidMount: function() {
  77. ReactDOM.findDOMNode(this).scrollIntoView();
  78. },
  79. render: function() {
  80. return <div>Hello</div>;
  81. }
  82. });
  83. `,
  84. errors: [{
  85. message: 'Do not use findDOMNode'
  86. }]
  87. }, {
  88. code: `
  89. class Hello extends Component {
  90. componentDidMount() {
  91. findDOMNode(this).scrollIntoView();
  92. }
  93. render() {
  94. return <div>Hello</div>;
  95. }
  96. };
  97. `,
  98. errors: [{
  99. message: 'Do not use findDOMNode'
  100. }]
  101. }, {
  102. code: `
  103. class Hello extends Component {
  104. componentDidMount() {
  105. this.node = findDOMNode(this);
  106. }
  107. render() {
  108. return <div>Hello</div>;
  109. }
  110. };
  111. `,
  112. errors: [{
  113. message: 'Do not use findDOMNode'
  114. }]
  115. }]
  116. });