route.reactivity.spec.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. Route = FlowRouter.Route;
  2. Tinytest.addAsync('Client - Route - Reactivity - getParam', function (test, done) {
  3. var r = new Route();
  4. Tracker.autorun(function(c) {
  5. var param = r.getParam("id");
  6. if(param) {
  7. test.equal(param, "hello");
  8. c.stop();
  9. Meteor.defer(done);
  10. }
  11. });
  12. setTimeout(function() {
  13. var context = {
  14. params: {id: "hello"},
  15. queryParams: {}
  16. };
  17. r.registerRouteChange(context);
  18. }, 10);
  19. });
  20. Tinytest.addAsync('Client - Route - Reactivity - getParam on route close', function (test, done) {
  21. var r = new Route();
  22. var closeTriggered = false;
  23. Tracker.autorun(function(c) {
  24. var param = r.getParam("id");
  25. if(closeTriggered) {
  26. test.equal(param, undefined);
  27. c.stop();
  28. Meteor.defer(done);
  29. }
  30. });
  31. setTimeout(function() {
  32. closeTriggered = true;
  33. r.registerRouteClose();
  34. }, 10);
  35. });
  36. Tinytest.addAsync('Client - Route - Reactivity - getQueryParam', function (test, done) {
  37. var r = new Route();
  38. Tracker.autorun(function(c) {
  39. var param = r.getQueryParam("id");
  40. if(param) {
  41. test.equal(param, "hello");
  42. c.stop();
  43. Meteor.defer(done);
  44. }
  45. });
  46. setTimeout(function() {
  47. var context = {
  48. params: {},
  49. queryParams: {id: "hello"}
  50. };
  51. r.registerRouteChange(context);
  52. }, 10);
  53. });
  54. Tinytest.addAsync('Client - Route - Reactivity - getQueryParam on route close', function (test, done) {
  55. var r = new Route();
  56. var closeTriggered = false;
  57. Tracker.autorun(function(c) {
  58. var param = r.getQueryParam("id");
  59. if(closeTriggered) {
  60. test.equal(param, undefined);
  61. c.stop();
  62. Meteor.defer(done);
  63. }
  64. });
  65. setTimeout(function() {
  66. closeTriggered = true;
  67. r.registerRouteClose();
  68. }, 10);
  69. });
  70. Tinytest.addAsync('Client - Route - Reactivity - getRouteName rerun when route closed', function (test, done) {
  71. var r = new Route();
  72. r.name = "my-route";
  73. var closeTriggered = false;
  74. Tracker.autorun(function(c) {
  75. var name = r.getRouteName();
  76. test.equal(name, r.name);
  77. if(closeTriggered) {
  78. c.stop();
  79. Meteor.defer(done);
  80. }
  81. });
  82. setTimeout(function() {
  83. closeTriggered = true;
  84. r.registerRouteClose();
  85. }, 10);
  86. });
  87. Tinytest.addAsync('Client - Route - Reactivity - watchPathChange when routeChange', function (test, done) {
  88. var r = new Route();
  89. var pathChangeCounts = 0;
  90. var c = Tracker.autorun(function() {
  91. r.watchPathChange();
  92. pathChangeCounts++;
  93. });
  94. var context = {
  95. params: {},
  96. queryParams: {}
  97. };
  98. setTimeout(function() {
  99. r.registerRouteChange(context);
  100. setTimeout(checkAfterNormalRouteChange, 50);
  101. }, 10);
  102. function checkAfterNormalRouteChange() {
  103. test.equal(pathChangeCounts, 2);
  104. var lastRouteChange = true;
  105. r.registerRouteChange(context, lastRouteChange);
  106. setTimeout(checkAfterLastRouteChange, 10);
  107. }
  108. function checkAfterLastRouteChange() {
  109. test.equal(pathChangeCounts, 2);
  110. c.stop();
  111. Meteor.defer(done);
  112. }
  113. });
  114. Tinytest.addAsync('Client - Route - Reactivity - watchPathChange when routeClose', function (test, done) {
  115. var r = new Route();
  116. var pathChangeCounts = 0;
  117. var c = Tracker.autorun(function() {
  118. r.watchPathChange();
  119. pathChangeCounts++;
  120. });
  121. var context = {
  122. params: {},
  123. queryParams: {}
  124. };
  125. setTimeout(function() {
  126. r.registerRouteClose();
  127. setTimeout(checkAfterRouteClose, 10);
  128. }, 10);
  129. function checkAfterRouteClose() {
  130. test.equal(pathChangeCounts, 2);
  131. c.stop();
  132. Meteor.defer(done);
  133. }
  134. });