WaitForRequests middleware may miss Ajax/Vue requests
We see intermittent test failures with spec/features/merge_requests/discussion_spec.rb
that appear to be caused by stray Ajax calls (e.g. https://gitlab.com/gitlab-org/gitlab-ee/builds/18786367). Adding debugging, I've been able to determine that it's possible for a Vue request to go out before the middleware sees it:
=== Requesting {"method":"GET","params":{},"headers":{},"url":"/namespace4/gitlabhq/merge_requests/1.json"}
=== done with #<RSpec::Core::ExampleProcsy "can be replied to">
=== before #<RSpec::Core::ExampleProcsy "is displayed"> | ETA: 00:09:09
=== Waiting for requests to complete
=== Number of active requests: 0
=== done with #<RSpec::Core::ExampleProcsy "is displayed">
1) Merge Request Discussions Commit comments displayed in MR context a commit diff comment behaves like a functional discussion is displayed
Failure/Error: url_for(params)
ActionController::UrlGenerationError:
No route matches {:action=>"show", :controller=>"projects/merge_requests", :format=>"json", :id=>"1", :namespace_id=>nil, :project_id=>"gitlabhq"}
Shared Example Group: "a functional discussion" called from ./spec/features/merge_requests/discussion_spec.rb:87
# ./app/controllers/projects/application_controller.rb:36:in `build_canonical_path'
# ./app/controllers/concerns/routable_actions.rb:35:in `ensure_canonical_path'
# ./app/controllers/concerns/routable_actions.rb:8:in `find_routable!'
# ./app/controllers/projects/application_controller.rb:29:in `project'
# ./lib/gitlab/i18n.rb:39:in `with_locale'
# ./lib/gitlab/i18n.rb:45:in `with_user_locale'
# ./app/controllers/application_controller.rb:291:in `set_locale'
# ./lib/gitlab/middleware/multipart.rb:93:in `call'
# ./lib/gitlab/request_profiler/middleware.rb:14:in `call'
# ./lib/gitlab/middleware/go.rb:16:in `call'
# ./lib/gitlab/etag_caching/middleware.rb:11:in `call'
# ./lib/gitlab/middleware/readonly_geo.rb:30:in `call'
# ./lib/gitlab/request_context.rb:18:in `call'
# ./config/initializers/fix_local_cache_middleware.rb:9:in `call'
# ./lib/gitlab/middleware/static.rb:9:in `call'
# ./lib/gitlab/testing/request_blocker_middleware.rb:36:in `call'
=== before #<RSpec::Core::ExampleProcsy "can be replied to">
There should be a corresponding === Done with {"method":"GET","params":{},"headers":{},"url":"/namespace4/gitlabhq/merge_requests/1.json"}
log message, but it comes later after this failure has occurred.