no-is-mounted.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /**
  2. * @fileoverview Prevent usage of isMounted
  3. * @author Joe Lencioni
  4. */
  5. 'use strict';
  6. // ------------------------------------------------------------------------------
  7. // Requirements
  8. // ------------------------------------------------------------------------------
  9. const rule = require('../../../lib/rules/no-is-mounted');
  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-is-mounted', rule, {
  23. valid: [{
  24. code: `
  25. var Hello = function() {
  26. };
  27. `
  28. }, {
  29. code: `
  30. var Hello = createReactClass({
  31. render: function() {
  32. return <div>Hello</div>;
  33. }
  34. });
  35. `
  36. }, {
  37. code: `
  38. var Hello = createReactClass({
  39. componentDidUpdate: function() {
  40. someNonMemberFunction(arg);
  41. this.someFunc = this.isMounted;
  42. },
  43. render: function() {
  44. return <div>Hello</div>;
  45. }
  46. });
  47. `
  48. }],
  49. invalid: [{
  50. code: `
  51. var Hello = createReactClass({
  52. componentDidUpdate: function() {
  53. if (!this.isMounted()) {
  54. return;
  55. }
  56. },
  57. render: function() {
  58. return <div>Hello</div>;
  59. }
  60. });
  61. `,
  62. errors: [{
  63. message: 'Do not use isMounted'
  64. }]
  65. }, {
  66. code: `
  67. var Hello = createReactClass({
  68. someMethod: function() {
  69. if (!this.isMounted()) {
  70. return;
  71. }
  72. },
  73. render: function() {
  74. return <div onClick={this.someMethod.bind(this)}>Hello</div>;
  75. }
  76. });
  77. `,
  78. errors: [{
  79. message: 'Do not use isMounted'
  80. }]
  81. }, {
  82. code: `
  83. class Hello extends React.Component {
  84. someMethod() {
  85. if (!this.isMounted()) {
  86. return;
  87. }
  88. }
  89. render() {
  90. return <div onClick={this.someMethod.bind(this)}>Hello</div>;
  91. }
  92. };
  93. `,
  94. errors: [{
  95. message: 'Do not use isMounted'
  96. }]
  97. }]
  98. });