I have a system spec for a page that has js that makes ajax calls back to my 
server.  One of my tests looks like this:

      it 'should make a call to the server' do
        expect_any_instance_of(BooksController).to 
receive(:modify).with(hash_including({verb: 'ChangeBook', book_id: 
@book.id.to_s, status: to.to_s}.stringify_keys)).and_return([200, nil])
        @control.click()
      end


If I remove the “.with (…)” part of the call, the test passes. The error 
message says something about “double render” but I think that must be 
misleading because I don’t get a double-render error without the “.with” and I 
also do not get a double render error when I run the page live. Following is 
the full output of the test (highlighted sections show the partial hash I’m 
searching for and the params that are in the call:

     Failure/Error: super.tap { default_render unless performed? }
     
       (#<BooksController:0x00007f8a8f380ce0 @_action_has_layout=true, 
@_routes=nil, @_request=#<ActionDispatch::Request:0x00007f8a8f382338 
@env={"rack.version"=>[1, 6], "rack.errors"=>#<StringIO:0x00007f8a8cb81168>, 
"rack.multithread"=>false, "rack.multiprocess"=>false, "rack.run_once"=>false, 
"SCRIPT_NAME"=>"", "QUERY_STRING"=>"", "SERVER_PROTOCOL"=>"HTTP/1.1", 
"SERVER_SOFTWARE"=>"puma 5.1.0 At Your Service", 
"GATEWAY_INTERFACE"=>"CGI/1.2", "REQUEST_METHOD"=>"PUT", 
"REQUEST_PATH"=>"/books/modify.js", "REQUEST_URI"=>"/books/modify.js", 
"HTTP_VERSION"=>"HTTP/1.1", "HTTP_HOST"=>"127.0.0.1:63499", 
"HTTP_CONNECTION"=>"keep-alive", "CONTENT_LENGTH"=>"62", 
"HTTP_USER_AGENT"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) 
AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/89.0.4389.90 
Safari/537.36", "HTTP_X_REQUESTED_WITH"=>"XMLHttpRequest", 
"CONTENT_TYPE"=>"application/x-www-form-urlencoded; charset=UTF-8", 
"HTTP_ACCEPT"=>"*/*", "HTTP_ORIGIN"=>"http://127.0.0.1:63499";, 
"HTTP_SEC_FETCH_SITE"=>"same-origin", "HTTP_SEC_FETCH_MODE"=>"cors", 
"HTTP_SEC_FETCH_DEST"=>"empty", "HTTP_REFERER"=>"http://127.0.0.1:63499/skus";, 
"HTTP_ACCEPT_ENCODING"=>"gzip, deflate, br", "HTTP_ACCEPT_LANGUAGE"=>"en-US", 
"HTTP_COOKIE"=>"auth_token=21a2cc0b56ce2911c4af42c092d0f595; 
_Novelty-Stats_session=dm9NS1JnaTFkWjhCVEhpRGtPUHNZUzk5TW56WXl1aWxoYXFYVmU3SVAyZlJkRGppbUR2QzE1bHVqQkxvUUt0YVc2WXd3MW5yMXNKYWsvdExPSDMyZHpja1B1dUFuY0JEc0ZSNDQ3TTJldFVOeUd3WVAzcG1lcWVNUEhHc1hmRVFaSXN0Y2diaHV1eFNZYy8vYllaNWFQSWNGbGdqUno1RlpFTFh5ZWRHeW9YNmFIc3lMTElEVmhLUXFHTEkvT2ExWFVXdEE4dU9veUJjU3ozQytiSTRNbUpEWVNaNWxsbHlvWWdNYWFmTTBJSEpiQjNFRm9laS9BaXpPNitwUkFwTS0tWmlWNncrMnhZcUYvR25IZ0lyU0wwdz09--43473ba27a643f2655b418b79eefdecb599f173c",
 "puma.request_body_wait"=>0, "SERVER_NAME"=>"127.0.0.1", 
"SERVER_PORT"=>"63499", "PATH_INFO"=>"/books/modify.js", 
"REMOTE_ADDR"=>"127.0.0.1", "puma.socket"=>#<TCPSocket:fd 20>, 
"rack.hijack?"=>true, "rack.hijack"=>#<Puma::Client:0x3fc5539d076c 
@ready=false>, "rack.input"=>#<StringIO:0x00007f8aa0876130>, 
"rack.url_scheme"=>"http", "rack.after_reply"=>[], 
"puma.config"=>#<Puma::Configuration:0x00007f8a8cb81618 
@options=#<Puma::UserFileDefaultOptions:0x00007f8a8cb81438 
@user_options={:Port=>63499, :workers=>0, :daemon=>false, :min_threads=>0, 
:max_threads=>1, :binds=>["tcp://0.0.0.0:63499"], 
:app=>#<Capybara::Server::Middleware:0x00007f8a9d6ee310 
@app=#<Rack::Builder:0x00007f8aa76933e8 @freeze_app=false, @warmup=nil, 
@run=nil, 
@map={"/"=>#<Proc:0x00007f8aa76932a8@/Users/jackrg/.rbenv/versions/2.4.10/lib/ruby/gems/2.4.0/gems/actionpack-5.1.7/lib/action_dispatch/system_test_case.rb:101>},
 @use=[]>, @extended_app=#<Rack::Builder:0x00007f8aa76933e8 @freeze_app=false, 
@warmup=nil, @run=nil, 
@map={"/"=>#<Proc:0x00007f8aa76932a8@/Users/jackrg/.rbenv/versions/2.4.10/lib/ruby/gems/2.4.0/gems/actionpack-5.1.7/lib/action_dispatch/system_test_case.rb:101>},
 @use=[]>, @counter=#<Capybara::Server::Middleware::Counter:0x00007f8a9d6ee298 
@value=0, @mutex=#<Thread::Mutex:0x00007f8a9d6ee270>>, 
@server_errors=[StandardError]>, :environment=>"test"}, 
@file_options={:min_threads=>5, :max_threads=>5, 
:binds=>["tcp://0.0.0.0:3000"], :environment=>"test"}, 
@default_options={:min_threads=>0, :max_threads=>5, :log_requests=>false, 
:debug=>false, :binds=>["tcp://0.0.0.0:9292"], :workers=>0, :mode=>:http, 
:worker_timeout=>60, :worker_boot_timeout=>60, :worker_shutdown_timeout=>30, 
:remote_address=>:socket, :tag=>"Novelty-Stats", :environment=>"test", 
:rackup=>"config.ru", :logger=>#<IO:<STDOUT>>, :persistent_timeout=>20, 
:first_data_timeout=>30, :raise_exception_on_sigterm=>true, 
:max_fast_inline=>10, :Verbose=>false, :Silent=>false, :preload_app=>false}>, 
@plugins=#<Puma::PluginLoader:0x00007f8a8cb813e8 
@instances=[#<#<Class:0x00007f8a8cb73770>:0x00007f8a8cb731a8>]>, 
@user_dsl=#<Puma::DSL:0x00007f8a8cb81398 
@config=#<Puma::Configuration:0x00007f8a8cb81618 ...>, @options={:Port=>63499, 
:workers=>0, :daemon=>false, :min_threads=>0, :max_threads=>1, 
:binds=>["tcp://0.0.0.0:63499"], 
:app=>#<Capybara::Server::Middleware:0x00007f8a9d6ee310 
@app=#<Rack::Builder:0x00007f8aa76933e8 @freeze_app=false, @warmup=nil, 
@run=nil, 
@map={"/"=>#<Proc:0x00007f8aa76932a8@/Users/jackrg/.rbenv/versions/2.4.10/lib/ruby/gems/2.4.0/gems/actionpack-5.1.7/lib/action_dispatch/system_test_case.rb:101>},
 @use=[]>, @extended_app=#<Rack::Builder:0x00007f8aa76933e8 @freeze_app=false, 
@warmup=nil, @run=nil, 
@map={"/"=>#<Proc:0x00007f8aa76932a8@/Users/jackrg/.rbenv/versions/2.4.10/lib/ruby/gems/2.4.0/gems/actionpack-5.1.7/lib/action_dispatch/system_test_case.rb:101>},
 @use=[]>, @counter=#<Capybara::Server::Middleware::Counter:0x00007f8a9d6ee298 
@value=0, @mutex=#<Thread::Mutex:0x00007f8a9d6ee270>>, 
@server_errors=[StandardError]>, :environment=>"test"}, @plugins=[]>, 
@file_dsl=#<Puma::DSL:0x00007f8a8cb81348 
@config=#<Puma::Configuration:0x00007f8a8cb81618 ...>, 
@options={:min_threads=>5, :max_threads=>5, :binds=>["tcp://0.0.0.0:3000"], 
:environment=>"test"}, @plugins=[], @path="config/puma.rb">, 
@default_dsl=#<Puma::DSL:0x00007f8a8cb812f8 
@config=#<Puma::Configuration:0x00007f8a8cb81618 ...>, 
@options={:min_threads=>0, :max_threads=>5, :log_requests=>false, 
:debug=>false, :binds=>["tcp://0.0.0.0:9292"], :workers=>0, :mode=>:http, 
:worker_timeout=>60, :worker_boot_timeout=>60, :worker_shutdown_timeout=>30, 
:remote_address=>:socket, :tag=>"Novelty-Stats", :environment=>"test", 
:rackup=>"config.ru", :logger=>#<IO:<STDOUT>>, :persistent_timeout=>20, 
:first_data_timeout=>30, :raise_exception_on_sigterm=>true, 
:max_fast_inline=>10, :Verbose=>false, :Silent=>false, :preload_app=>false}, 
@plugins=[]>>, "action_dispatch.parameter_filter"=>[:password, :ranking_lists, 
:country_list, :password], "action_dispatch.redirect_filter"=>[], 
"action_dispatch.secret_token"=>nil, 
"action_dispatch.secret_key_base"=>"a0b4013fe28a80ef1439d5830ac763a03d87fcb9ea0eb1ebded8c4f956905d3397c597731f43ee9e50aa9dcd18e4ebf3cda6c9a754cbfe7dc823bd2cd2a6964b",
 "action_dispatch.show_exceptions"=>false, 
"action_dispatch.show_detailed_exceptions"=>true, 
"action_dispatch.logger"=>#<ActiveSupport::Logger:0x00007f8aa4a5bc08 @level=2, 
@progname=nil, @default_formatter=#<Logger::Formatter:0x00007f8aa4a5bb18 
@datetime_format=nil>, 
@formatter=#<ActiveSupport::Logger::SimpleFormatter:0x00007f8aa4f5f5d8 
@datetime_format=nil, 
@thread_key="activesupport_tagged_logging_tags:70116724898540">, 
@logdev=#<Logger::LogDevice:0x00007f8aa4a5bac8 @shift_period_suffix=nil, 
@shift_size=nil, @shift_age=nil, @filename=nil, 
@dev=#<File:/Users/jackrg/Documents/Novelty-Stats/log/test.log>, 
@mon_owner=nil, @mon_count=0, @mon_mutex=#<Thread::Mutex:0x00007f8aa4a5ba50>>, 
@local_levels=#<Concurrent::Map:0x00007f8aa4a5b960 entries=0 
default_proc=nil>>, 
"action_dispatch.backtrace_cleaner"=>#<Rails::BacktraceCleaner:0x00007f8aaae28830
 
@filters=[#<Proc:0x00007f8aaae28718@/Users/jackrg/.rbenv/versions/2.4.10/lib/ruby/gems/2.4.0/gems/railties-5.1.7/lib/rails/backtrace_cleaner.rb:14>,
 
#<Proc:0x00007f8aaae286f0@/Users/jackrg/.rbenv/versions/2.4.10/lib/ruby/gems/2.4.0/gems/railties-5.1.7/lib/rails/backtrace_cleaner.rb:15>,
 
#<Proc:0x00007f8aaae286c8@/Users/jackrg/.rbenv/versions/2.4.10/lib/ruby/gems/2.4.0/gems/railties-5.1.7/lib/rails/backtrace_cleaner.rb:16>,
 
#<Proc:0x00007f8aaae2bbc0@/Users/jackrg/.rbenv/versions/2.4.10/lib/ruby/gems/2.4.0/gems/railties-5.1.7/lib/rails/backtrace_cleaner.rb:29>],
 
@silencers=[#<Proc:0x00007f8aaae13f98@/Users/jackrg/.rbenv/versions/2.4.10/lib/ruby/gems/2.4.0/gems/railties-5.1.7/lib/rails/backtrace_cleaner.rb:19>],
 @root="/Users/jackrg/Documents/Novelty-Stats/">, 
"action_dispatch.key_generator"=>#<ActiveSupport::CachingKeyGenerator:0x00007f8a9d48c6d0
 @key_generator=#<ActiveSupport::KeyGenerator:0x00007f8a9d48c6f8 
@secret="a0b4013fe28a80ef1439d5830ac763a03d87fcb9ea0eb1ebded8c4f956905d3397c597731f43ee9e50aa9dcd18e4ebf3cda6c9a754cbfe7dc823bd2cd2a6964b",
 @iterations=1000>, @cache_keys=#<Concurrent::Map:0x00007f8a9d48c658 entries=3 
default_proc=nil>>, "action_dispatch.http_auth_salt"=>"http authentication", 
"action_dispatch.signed_cookie_salt"=>"signed cookie", 
"action_dispatch.encrypted_cookie_salt"=>"encrypted cookie", 
"action_dispatch.encrypted_signed_cookie_salt"=>"signed encrypted cookie", 
"action_dispatch.cookies_serializer"=>:marshal, 
"action_dispatch.cookies_digest"=>nil, 
"action_dispatch.routes"=>#<ActionDispatch::Routing::RouteSet:0x00007f8aa4ada490>,
 "ROUTES_70116722528840_SCRIPT_NAME"=>"", 
"ORIGINAL_FULLPATH"=>"/books/modify.js", "ORIGINAL_SCRIPT_NAME"=>"", 
"action_dispatch.request_id"=>"dbb37c76-180b-448d-a6dc-01a05ce225c9", 
"action_dispatch.remote_ip"=>#<ActionDispatch::RemoteIp::GetIp:0x00007f8aa08752a8
 @req=#<ActionDispatch::Request:0x00007f8aa08752d0 @env={...}, 
@filtered_parameters=nil, @filtered_env=nil, @filtered_path=nil, @protocol=nil, 
@port=nil, @method=nil, @request_method=nil, @remote_ip=nil, 
@original_fullpath=nil, @fullpath=nil, @ip=nil>, @check_ip=true, 
@proxies=[#<IPAddr: IPv4:127.0.0.1/255.255.255.255>, #<IPAddr: 
IPv6:0000:0000:0000:0000:0000:0000:0000:0001/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff>,
 #<IPAddr: 
IPv6:fc00:0000:0000:0000:0000:0000:0000:0000/fe00:0000:0000:0000:0000:0000:0000:0000>,
 #<IPAddr: IPv4:10.0.0.0/255.0.0.0>, #<IPAddr: IPv4:172.16.0.0/255.240.0.0>, 
#<IPAddr: IPv4:192.168.0.0/255.255.0.0>], @ip="127.0.0.1">, 
"rack.session"=>#<ActionDispatch::Request::Session:0x7f8aa0874f60 not yet 
loaded>, 
"rack.session.options"=>#<ActionDispatch::Request::Session::Options:0x00007f8aa0874f10
 @by=#<ActionDispatch::Session::CookieStore:0x00007f8a9e2e8eb8 
@app=#<Rack::Head:0x00007f8a9e2e8f80 
@app=#<Rack::ConditionalGet:0x00007f8a9e2e8fa8 
@app=#<Rack::ETag:0x00007f8a9e2e8ff8 
@app=#<OmniAuth::Builder:0x00007f8a9e2ea7b8 @freeze_app=false, @warmup=nil, 
@run=#<ActionDispatch::Routing::RouteSet:0x00007f8aa4ada490>, @map=nil, 
@use=[#<Proc:0x00007f8a9e2e9020@/Users/jackrg/.rbenv/versions/2.4.10/lib/ruby/gems/2.4.0/gems/rack-2.2.3/lib/rack/builder.rb:158>],
 @options={}>, @cache_control="max-age=0, private, must-revalidate", 
@no_cache_control="no-cache">>>, @default_options={:path=>"/", :domain=>nil, 
:expire_after=>nil, :secure=>false, :httponly=>true, :defer=>false, 
:renew=>false}, @key="_Novelty-Stats_session", @cookie_only=true, 
@same_site=nil>, @delegate={:path=>"/", :domain=>nil, :expire_after=>nil, 
:secure=>false, :httponly=>true, :defer=>false, :renew=>false}>, 
"action_dispatch.request.path_parameters"=>{:controller=>"books", 
:action=>"modify", :format=>"js"}, 
"action_controller.instance"=>#<BooksController:0x00007f8a8f380ce0 ...>, 
"action_dispatch.request.content_type"=>#<Mime::Type:0x00007f8a9cd84428 
@synonyms=[], @symbol=:url_encoded_form, 
@string="application/x-www-form-urlencoded", @hash=1420162111980396459>, 
"rack.tempfiles"=>[], "rack.request.form_hash"=>{"verb"=>"ChangeBook", 
"book_id"=>"34880", "status"=>"inactive", "ts"=>"1617061982022"}, 
"rack.request.form_vars"=>"verb=ChangeBook&book_id=34880&status=inactive&ts=1617061982022",
 "rack.request.form_input"=>#<StringIO:0x00007f8aa0876130>, 
"action_dispatch.request.request_parameters"=>{"verb"=>"ChangeBook", 
"book_id"=>"34880", "status"=>"inactive", "ts"=>"1617061982022"}, 
"rack.request.query_string"=>"", "rack.request.query_hash"=>{}, 
"action_dispatch.request.query_parameters"=>{}, 
"action_dispatch.request.parameters"=>{"verb"=>"ChangeBook", 
"book_id"=>"34880", "status"=>"inactive", "ts"=>"1617061982022", 
"controller"=>"books", "action"=>"modify", "format"=>"js"}, 
"action_dispatch.request.formats"=>[#<Mime::Type:0x00007f8a9cd86a70 
@synonyms=["application/javascript", "application/x-javascript"], @symbol=:js, 
@string="text/javascript", @hash=-2007623201317620867>], 
"rack.request.cookie_hash"=>{"auth_token"=>"21a2cc0b56ce2911c4af42c092d0f595", 
"_Novelty-Stats_session"=>"dm9NS1JnaTFkWjhCVEhpRGtPUHNZUzk5TW56WXl1aWxoYXFYVmU3SVAyZlJkRGppbUR2QzE1bHVqQkxvUUt0YVc2WXd3MW5yMXNKYWsvdExPSDMyZHpja1B1dUFuY0JEc0ZSNDQ3TTJldFVOeUd3WVAzcG1lcWVNUEhHc1hmRVFaSXN0Y2diaHV1eFNZYy8vYllaNWFQSWNGbGdqUno1RlpFTFh5ZWRHeW9YNmFIc3lMTElEVmhLUXFHTEkvT2ExWFVXdEE4dU9veUJjU3ozQytiSTRNbUpEWVNaNWxsbHlvWWdNYWFmTTBJSEpiQjNFRm9laS9BaXpPNitwUkFwTS0tWmlWNncrMnhZcUYvR25IZ0lyU0wwdz09--43473ba27a643f2655b418b79eefdecb599f173c"},
 "rack.request.cookie_string"=>"auth_token=21a2cc0b56ce2911c4af42c092d0f595; 
_Novelty-Stats_session=dm9NS1JnaTFkWjhCVEhpRGtPUHNZUzk5TW56WXl1aWxoYXFYVmU3SVAyZlJkRGppbUR2QzE1bHVqQkxvUUt0YVc2WXd3MW5yMXNKYWsvdExPSDMyZHpja1B1dUFuY0JEc0ZSNDQ3TTJldFVOeUd3WVAzcG1lcWVNUEhHc1hmRVFaSXN0Y2diaHV1eFNZYy8vYllaNWFQSWNGbGdqUno1RlpFTFh5ZWRHeW9YNmFIc3lMTElEVmhLUXFHTEkvT2ExWFVXdEE4dU9veUJjU3ozQytiSTRNbUpEWVNaNWxsbHlvWWdNYWFmTTBJSEpiQjNFRm9laS9BaXpPNitwUkFwTS0tWmlWNncrMnhZcUYvR25IZ0lyU0wwdz09--43473ba27a643f2655b418b79eefdecb599f173c",
 
"action_dispatch.cookies"=>#<ActionDispatch::Cookies::CookieJar:0x00007f8a8ebc4c40
 @set_cookies={}, @delete_cookies={}, 
@request=#<ActionDispatch::Request:0x00007f8a8f382338 ...>, 
@cookies={"auth_token"=>"21a2cc0b56ce2911c4af42c092d0f595", 
"_Novelty-Stats_session"=>"dm9NS1JnaTFkWjhCVEhpRGtPUHNZUzk5TW56WXl1aWxoYXFYVmU3SVAyZlJkRGppbUR2QzE1bHVqQkxvUUt0YVc2WXd3MW5yMXNKYWsvdExPSDMyZHpja1B1dUFuY0JEc0ZSNDQ3TTJldFVOeUd3WVAzcG1lcWVNUEhHc1hmRVFaSXN0Y2diaHV1eFNZYy8vYllaNWFQSWNGbGdqUno1RlpFTFh5ZWRHeW9YNmFIc3lMTElEVmhLUXFHTEkvT2ExWFVXdEE4dU9veUJjU3ozQytiSTRNbUpEWVNaNWxsbHlvWWdNYWFmTTBJSEpiQjNFRm9laS9BaXpPNitwUkFwTS0tWmlWNncrMnhZcUYvR25IZ0lyU0wwdz09--43473ba27a643f2655b418b79eefdecb599f173c"},
 @committed=false>}, @filtered_parameters={"verb"=>"ChangeBook", 
"book_id"=>"34880", "status"=>"inactive", "ts"=>"1617061982022", 
"controller"=>"books", "action"=>"modify", "format"=>"js"}, @filtered_env=nil, 
@filtered_path=nil, @protocol=nil, @port=nil, @method=nil, 
@request_method="PUT", @remote_ip="127.0.0.1", @original_fullpath=nil, 
@fullpath="/books/modify.js", @ip=nil, 
@headers=#<ActionDispatch::Http::Headers:0x00007f8a8ebc61f8 
@req=#<ActionDispatch::Request:0x00007f8a8f382338 ...>>>, 
@_response=#<ActionDispatch::Response:0x00007f8a8f380f10 @mon_owner=nil, 
@mon_count=0, @mon_mutex=#<Thread::Mutex:0x00007f8a8f380ec0>, 
@header={"X-Frame-Options"=>"SAMEORIGIN", "X-XSS-Protection"=>"1; mode=block", 
"X-Content-Type-Options"=>"nosniff", "Heartbleed"=>"REKEYED: 2014-04-08; see 
http://heartbleedheader.com"}, 
@stream=#<ActionDispatch::Response::Buffer:0x00007f8a8f380e70 
@response=#<ActionDispatch::Response:0x00007f8a8f380f10 ...>, @buf=[], 
@closed=false, @str_body=nil>, @status=200, 
@cv=#<MonitorMixin::ConditionVariable:0x00007f8a8f380e48 
@monitor=#<ActionDispatch::Response:0x00007f8a8f380f10 ...>, 
@cond=#<Thread::ConditionVariable:0x00007f8a8f380e20>>, @committed=false, 
@sending=false, @sent=false, @cache_control={}, 
@request=#<ActionDispatch::Request:0x00007f8a8f382338 @env={"rack.version"=>[1, 
6], "rack.errors"=>#<StringIO:0x00007f8a8cb81168>, "rack.multithread"=>false, 
"rack.multiprocess"=>false, "rack.run_once"=>false, "SCRIPT_NAME"=>"", 
"QUERY_STRING"=>"", "SERVER_PROTOCOL"=>"HTTP/1.1", "SERVER_SOFTWARE"=>"puma 
5.1.0 At Your Service", "GATEWAY_INTERFACE"=>"CGI/1.2", 
"REQUEST_METHOD"=>"PUT", "REQUEST_PATH"=>"/books/modify.js", 
"REQUEST_URI"=>"/books/modify.js", "HTTP_VERSION"=>"HTTP/1.1", 
"HTTP_HOST"=>"127.0.0.1:63499", "HTTP_CONNECTION"=>"keep-alive", 
"CONTENT_LENGTH"=>"62", "HTTP_USER_AGENT"=>"Mozilla/5.0 (Macintosh; Intel Mac 
OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/89.0.4389.90 
Safari/537.36", "HTTP_X_REQUESTED_WITH"=>"XMLHttpRequest", 
"CONTENT_TYPE"=>"application/x-www-form-urlencoded; charset=UTF-8", 
"HTTP_ACCEPT"=>"*/*", "HTTP_ORIGIN"=>"http://127.0.0.1:63499";, 
"HTTP_SEC_FETCH_SITE"=>"same-origin", "HTTP_SEC_FETCH_MODE"=>"cors", 
"HTTP_SEC_FETCH_DEST"=>"empty", "HTTP_REFERER"=>"http://127.0.0.1:63499/skus";, 
"HTTP_ACCEPT_ENCODING"=>"gzip, deflate, br", "HTTP_ACCEPT_LANGUAGE"=>"en-US", 
"HTTP_COOKIE"=>"auth_token=21a2cc0b56ce2911c4af42c092d0f595; 
_Novelty-Stats_session=dm9NS1JnaTFkWjhCVEhpRGtPUHNZUzk5TW56WXl1aWxoYXFYVmU3SVAyZlJkRGppbUR2QzE1bHVqQkxvUUt0YVc2WXd3MW5yMXNKYWsvdExPSDMyZHpja1B1dUFuY0JEc0ZSNDQ3TTJldFVOeUd3WVAzcG1lcWVNUEhHc1hmRVFaSXN0Y2diaHV1eFNZYy8vYllaNWFQSWNGbGdqUno1RlpFTFh5ZWRHeW9YNmFIc3lMTElEVmhLUXFHTEkvT2ExWFVXdEE4dU9veUJjU3ozQytiSTRNbUpEWVNaNWxsbHlvWWdNYWFmTTBJSEpiQjNFRm9laS9BaXpPNitwUkFwTS0tWmlWNncrMnhZcUYvR25IZ0lyU0wwdz09--43473ba27a643f2655b418b79eefdecb599f173c",
 "puma.request_body_wait"=>0, "SERVER_NAME"=>"127.0.0.1", 
"SERVER_PORT"=>"63499", "PATH_INFO"=>"/books/modify.js", 
"REMOTE_ADDR"=>"127.0.0.1", "puma.socket"=>#<TCPSocket:fd 20>, 
"rack.hijack?"=>true, "rack.hijack"=>#<Puma::Client:0x3fc5539d076c 
@ready=false>, "rack.input"=>#<StringIO:0x00007f8aa0876130>, 
"rack.url_scheme"=>"http", "rack.after_reply"=>[], 
"puma.config"=>#<Puma::Configuration:0x00007f8a8cb81618 
@options=#<Puma::UserFileDefaultOptions:0x00007f8a8cb81438 
@user_options={:Port=>63499, :workers=>0, :daemon=>false, :min_threads=>0, 
:max_threads=>1, :binds=>["tcp://0.0.0.0:63499"], 
:app=>#<Capybara::Server::Middleware:0x00007f8a9d6ee310 
@app=#<Rack::Builder:0x00007f8aa76933e8 @freeze_app=false, @warmup=nil, 
@run=nil, 
@map={"/"=>#<Proc:0x00007f8aa76932a8@/Users/jackrg/.rbenv/versions/2.4.10/lib/ruby/gems/2.4.0/gems/actionpack-5.1.7/lib/action_dispatch/system_test_case.rb:101>},
 @use=[]>, @extended_app=#<Rack::Builder:0x00007f8aa76933e8 @freeze_app=false, 
@warmup=nil, @run=nil, 
@map={"/"=>#<Proc:0x00007f8aa76932a8@/Users/jackrg/.rbenv/versions/2.4.10/lib/ruby/gems/2.4.0/gems/actionpack-5.1.7/lib/action_dispatch/system_test_case.rb:101>},
 @use=[]>, @counter=#<Capybara::Server::Middleware::Counter:0x00007f8a9d6ee298 
@value=0, @mutex=#<Thread::Mutex:0x00007f8a9d6ee270>>, 
@server_errors=[StandardError]>, :environment=>"test"}, 
@file_options={:min_threads=>5, :max_threads=>5, 
:binds=>["tcp://0.0.0.0:3000"], :environment=>"test"}, 
@default_options={:min_threads=>0, :max_threads=>5, :log_requests=>false, 
:debug=>false, :binds=>["tcp://0.0.0.0:9292"], :workers=>0, :mode=>:http, 
:worker_timeout=>60, :worker_boot_timeout=>60, :worker_shutdown_timeout=>30, 
:remote_address=>:socket, :tag=>"Novelty-Stats", :environment=>"test", 
:rackup=>"config.ru", :logger=>#<IO:<STDOUT>>, :persistent_timeout=>20, 
:first_data_timeout=>30, :raise_exception_on_sigterm=>true, 
:max_fast_inline=>10, :Verbose=>false, :Silent=>false, :preload_app=>false}>, 
@plugins=#<Puma::PluginLoader:0x00007f8a8cb813e8 
@instances=[#<#<Class:0x00007f8a8cb73770>:0x00007f8a8cb731a8>]>, 
@user_dsl=#<Puma::DSL:0x00007f8a8cb81398 
@config=#<Puma::Configuration:0x00007f8a8cb81618 ...>, @options={:Port=>63499, 
:workers=>0, :daemon=>false, :min_threads=>0, :max_threads=>1, 
:binds=>["tcp://0.0.0.0:63499"], 
:app=>#<Capybara::Server::Middleware:0x00007f8a9d6ee310 
@app=#<Rack::Builder:0x00007f8aa76933e8 @freeze_app=false, @warmup=nil, 
@run=nil, 
@map={"/"=>#<Proc:0x00007f8aa76932a8@/Users/jackrg/.rbenv/versions/2.4.10/lib/ruby/gems/2.4.0/gems/actionpack-5.1.7/lib/action_dispatch/system_test_case.rb:101>},
 @use=[]>, @extended_app=#<Rack::Builder:0x00007f8aa76933e8 @freeze_app=false, 
@warmup=nil, @run=nil, 
@map={"/"=>#<Proc:0x00007f8aa76932a8@/Users/jackrg/.rbenv/versions/2.4.10/lib/ruby/gems/2.4.0/gems/actionpack-5.1.7/lib/action_dispatch/system_test_case.rb:101>},
 @use=[]>, @counter=#<Capybara::Server::Middleware::Counter:0x00007f8a9d6ee298 
@value=0, @mutex=#<Thread::Mutex:0x00007f8a9d6ee270>>, 
@server_errors=[StandardError]>, :environment=>"test"}, @plugins=[]>, 
@file_dsl=#<Puma::DSL:0x00007f8a8cb81348 
@config=#<Puma::Configuration:0x00007f8a8cb81618 ...>, 
@options={:min_threads=>5, :max_threads=>5, :binds=>["tcp://0.0.0.0:3000"], 
:environment=>"test"}, @plugins=[], @path="config/puma.rb">, 
@default_dsl=#<Puma::DSL:0x00007f8a8cb812f8 
@config=#<Puma::Configuration:0x00007f8a8cb81618 ...>, 
@options={:min_threads=>0, :max_threads=>5, :log_requests=>false, 
:debug=>false, :binds=>["tcp://0.0.0.0:9292"], :workers=>0, :mode=>:http, 
:worker_timeout=>60, :worker_boot_timeout=>60, :worker_shutdown_timeout=>30, 
:remote_address=>:socket, :tag=>"Novelty-Stats", :environment=>"test", 
:rackup=>"config.ru", :logger=>#<IO:<STDOUT>>, :persistent_timeout=>20, 
:first_data_timeout=>30, :raise_exception_on_sigterm=>true, 
:max_fast_inline=>10, :Verbose=>false, :Silent=>false, :preload_app=>false}, 
@plugins=[]>>, "action_dispatch.parameter_filter"=>[:password, :ranking_lists, 
:country_list, :password], "action_dispatch.redirect_filter"=>[], 
"action_dispatch.secret_token"=>nil, 
"action_dispatch.secret_key_base"=>"a0b4013fe28a80ef1439d5830ac763a03d87fcb9ea0eb1ebded8c4f956905d3397c597731f43ee9e50aa9dcd18e4ebf3cda6c9a754cbfe7dc823bd2cd2a6964b",
 "action_dispatch.show_exceptions"=>false, 
"action_dispatch.show_detailed_exceptions"=>true, 
"action_dispatch.logger"=>#<ActiveSupport::Logger:0x00007f8aa4a5bc08 @level=2, 
@progname=nil, @default_formatter=#<Logger::Formatter:0x00007f8aa4a5bb18 
@datetime_format=nil>, 
@formatter=#<ActiveSupport::Logger::SimpleFormatter:0x00007f8aa4f5f5d8 
@datetime_format=nil, 
@thread_key="activesupport_tagged_logging_tags:70116724898540">, 
@logdev=#<Logger::LogDevice:0x00007f8aa4a5bac8 @shift_period_suffix=nil, 
@shift_size=nil, @shift_age=nil, @filename=nil, 
@dev=#<File:/Users/jackrg/Documents/Novelty-Stats/log/test.log>, 
@mon_owner=nil, @mon_count=0, @mon_mutex=#<Thread::Mutex:0x00007f8aa4a5ba50>>, 
@local_levels=#<Concurrent::Map:0x00007f8aa4a5b960 entries=0 
default_proc=nil>>, 
"action_dispatch.backtrace_cleaner"=>#<Rails::BacktraceCleaner:0x00007f8aaae28830
 
@filters=[#<Proc:0x00007f8aaae28718@/Users/jackrg/.rbenv/versions/2.4.10/lib/ruby/gems/2.4.0/gems/railties-5.1.7/lib/rails/backtrace_cleaner.rb:14>,
 
#<Proc:0x00007f8aaae286f0@/Users/jackrg/.rbenv/versions/2.4.10/lib/ruby/gems/2.4.0/gems/railties-5.1.7/lib/rails/backtrace_cleaner.rb:15>,
 
#<Proc:0x00007f8aaae286c8@/Users/jackrg/.rbenv/versions/2.4.10/lib/ruby/gems/2.4.0/gems/railties-5.1.7/lib/rails/backtrace_cleaner.rb:16>,
 
#<Proc:0x00007f8aaae2bbc0@/Users/jackrg/.rbenv/versions/2.4.10/lib/ruby/gems/2.4.0/gems/railties-5.1.7/lib/rails/backtrace_cleaner.rb:29>],
 
@silencers=[#<Proc:0x00007f8aaae13f98@/Users/jackrg/.rbenv/versions/2.4.10/lib/ruby/gems/2.4.0/gems/railties-5.1.7/lib/rails/backtrace_cleaner.rb:19>],
 @root="/Users/jackrg/Documents/Novelty-Stats/">, 
"action_dispatch.key_generator"=>#<ActiveSupport::CachingKeyGenerator:0x00007f8a9d48c6d0
 @key_generator=#<ActiveSupport::KeyGenerator:0x00007f8a9d48c6f8 
@secret="a0b4013fe28a80ef1439d5830ac763a03d87fcb9ea0eb1ebded8c4f956905d3397c597731f43ee9e50aa9dcd18e4ebf3cda6c9a754cbfe7dc823bd2cd2a6964b",
 @iterations=1000>, @cache_keys=#<Concurrent::Map:0x00007f8a9d48c658 entries=3 
default_proc=nil>>, "action_dispatch.http_auth_salt"=>"http authentication", 
"action_dispatch.signed_cookie_salt"=>"signed cookie", 
"action_dispatch.encrypted_cookie_salt"=>"encrypted cookie", 
"action_dispatch.encrypted_signed_cookie_salt"=>"signed encrypted cookie", 
"action_dispatch.cookies_serializer"=>:marshal, 
"action_dispatch.cookies_digest"=>nil, 
"action_dispatch.routes"=>#<ActionDispatch::Routing::RouteSet:0x00007f8aa4ada490>,
 "ROUTES_70116722528840_SCRIPT_NAME"=>"", 
"ORIGINAL_FULLPATH"=>"/books/modify.js", "ORIGINAL_SCRIPT_NAME"=>"", 
"action_dispatch.request_id"=>"dbb37c76-180b-448d-a6dc-01a05ce225c9", 
"action_dispatch.remote_ip"=>#<ActionDispatch::RemoteIp::GetIp:0x00007f8aa08752a8
 @req=#<ActionDispatch::Request:0x00007f8aa08752d0 @env={...}, 
@filtered_parameters=nil, @filtered_env=nil, @filtered_path=nil, @protocol=nil, 
@port=nil, @method=nil, @request_method=nil, @remote_ip=nil, 
@original_fullpath=nil, @fullpath=nil, @ip=nil>, @check_ip=true, 
@proxies=[#<IPAddr: IPv4:127.0.0.1/255.255.255.255>, #<IPAddr: 
IPv6:0000:0000:0000:0000:0000:0000:0000:0001/ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff>,
 #<IPAddr: 
IPv6:fc00:0000:0000:0000:0000:0000:0000:0000/fe00:0000:0000:0000:0000:0000:0000:0000>,
 #<IPAddr: IPv4:10.0.0.0/255.0.0.0>, #<IPAddr: IPv4:172.16.0.0/255.240.0.0>, 
#<IPAddr: IPv4:192.168.0.0/255.255.0.0>], @ip="127.0.0.1">, 
"rack.session"=>#<ActionDispatch::Request::Session:0x7f8aa0874f60 not yet 
loaded>, 
"rack.session.options"=>#<ActionDispatch::Request::Session::Options:0x00007f8aa0874f10
 @by=#<ActionDispatch::Session::CookieStore:0x00007f8a9e2e8eb8 
@app=#<Rack::Head:0x00007f8a9e2e8f80 
@app=#<Rack::ConditionalGet:0x00007f8a9e2e8fa8 
@app=#<Rack::ETag:0x00007f8a9e2e8ff8 
@app=#<OmniAuth::Builder:0x00007f8a9e2ea7b8 @freeze_app=false, @warmup=nil, 
@run=#<ActionDispatch::Routing::RouteSet:0x00007f8aa4ada490>, @map=nil, 
@use=[#<Proc:0x00007f8a9e2e9020@/Users/jackrg/.rbenv/versions/2.4.10/lib/ruby/gems/2.4.0/gems/rack-2.2.3/lib/rack/builder.rb:158>],
 @options={}>, @cache_control="max-age=0, private, must-revalidate", 
@no_cache_control="no-cache">>>, @default_options={:path=>"/", :domain=>nil, 
:expire_after=>nil, :secure=>false, :httponly=>true, :defer=>false, 
:renew=>false}, @key="_Novelty-Stats_session", @cookie_only=true, 
@same_site=nil>, @delegate={:path=>"/", :domain=>nil, :expire_after=>nil, 
:secure=>false, :httponly=>true, :defer=>false, :renew=>false}>, 
"action_dispatch.request.path_parameters"=>{:controller=>"books", 
:action=>"modify", :format=>"js"}, 
"action_controller.instance"=>#<BooksController:0x00007f8a8f380ce0 ...>, 
"action_dispatch.request.content_type"=>#<Mime::Type:0x00007f8a9cd84428 
@synonyms=[], @symbol=:url_encoded_form, 
@string="application/x-www-form-urlencoded", @hash=1420162111980396459>, 
"rack.tempfiles"=>[], "rack.request.form_hash"=>{"verb"=>"ChangeBook", 
"book_id"=>"34880", "status"=>"inactive", "ts"=>"1617061982022"}, 
"rack.request.form_vars"=>"verb=ChangeBook&book_id=34880&status=inactive&ts=1617061982022",
 "rack.request.form_input"=>#<StringIO:0x00007f8aa0876130>, 
"action_dispatch.request.request_parameters"=>{"verb"=>"ChangeBook", 
"book_id"=>"34880", "status"=>"inactive", "ts"=>"1617061982022"}, 
"rack.request.query_string"=>"", "rack.request.query_hash"=>{}, 
"action_dispatch.request.query_parameters"=>{}, 
"action_dispatch.request.parameters"=>{"verb"=>"ChangeBook", 
"book_id"=>"34880", "status"=>"inactive", "ts"=>"1617061982022", 
"controller"=>"books", "action"=>"modify", "format"=>"js"}, 
"action_dispatch.request.formats"=>[#<Mime::Type:0x00007f8a9cd86a70 
@synonyms=["application/javascript", "application/x-javascript"], @symbol=:js, 
@string="text/javascript", @hash=-2007623201317620867>], 
"rack.request.cookie_hash"=>{"auth_token"=>"21a2cc0b56ce2911c4af42c092d0f595", 
"_Novelty-Stats_session"=>"dm9NS1JnaTFkWjhCVEhpRGtPUHNZUzk5TW56WXl1aWxoYXFYVmU3SVAyZlJkRGppbUR2QzE1bHVqQkxvUUt0YVc2WXd3MW5yMXNKYWsvdExPSDMyZHpja1B1dUFuY0JEc0ZSNDQ3TTJldFVOeUd3WVAzcG1lcWVNUEhHc1hmRVFaSXN0Y2diaHV1eFNZYy8vYllaNWFQSWNGbGdqUno1RlpFTFh5ZWRHeW9YNmFIc3lMTElEVmhLUXFHTEkvT2ExWFVXdEE4dU9veUJjU3ozQytiSTRNbUpEWVNaNWxsbHlvWWdNYWFmTTBJSEpiQjNFRm9laS9BaXpPNitwUkFwTS0tWmlWNncrMnhZcUYvR25IZ0lyU0wwdz09--43473ba27a643f2655b418b79eefdecb599f173c"},
 "rack.request.cookie_string"=>"auth_token=21a2cc0b56ce2911c4af42c092d0f595; 
_Novelty-Stats_session=dm9NS1JnaTFkWjhCVEhpRGtPUHNZUzk5TW56WXl1aWxoYXFYVmU3SVAyZlJkRGppbUR2QzE1bHVqQkxvUUt0YVc2WXd3MW5yMXNKYWsvdExPSDMyZHpja1B1dUFuY0JEc0ZSNDQ3TTJldFVOeUd3WVAzcG1lcWVNUEhHc1hmRVFaSXN0Y2diaHV1eFNZYy8vYllaNWFQSWNGbGdqUno1RlpFTFh5ZWRHeW9YNmFIc3lMTElEVmhLUXFHTEkvT2ExWFVXdEE4dU9veUJjU3ozQytiSTRNbUpEWVNaNWxsbHlvWWdNYWFmTTBJSEpiQjNFRm9laS9BaXpPNitwUkFwTS0tWmlWNncrMnhZcUYvR25IZ0lyU0wwdz09--43473ba27a643f2655b418b79eefdecb599f173c",
 
"action_dispatch.cookies"=>#<ActionDispatch::Cookies::CookieJar:0x00007f8a8ebc4c40
 @set_cookies={}, @delete_cookies={}, 
@request=#<ActionDispatch::Request:0x00007f8a8f382338 ...>, 
@cookies={"auth_token"=>"21a2cc0b56ce2911c4af42c092d0f595", 
"_Novelty-Stats_session"=>"dm9NS1JnaTFkWjhCVEhpRGtPUHNZUzk5TW56WXl1aWxoYXFYVmU3SVAyZlJkRGppbUR2QzE1bHVqQkxvUUt0YVc2WXd3MW5yMXNKYWsvdExPSDMyZHpja1B1dUFuY0JEc0ZSNDQ3TTJldFVOeUd3WVAzcG1lcWVNUEhHc1hmRVFaSXN0Y2diaHV1eFNZYy8vYllaNWFQSWNGbGdqUno1RlpFTFh5ZWRHeW9YNmFIc3lMTElEVmhLUXFHTEkvT2ExWFVXdEE4dU9veUJjU3ozQytiSTRNbUpEWVNaNWxsbHlvWWdNYWFmTTBJSEpiQjNFRm9laS9BaXpPNitwUkFwTS0tWmlWNncrMnhZcUYvR25IZ0lyU0wwdz09--43473ba27a643f2655b418b79eefdecb599f173c"},
 @committed=false>}, @filtered_parameters={"verb"=>"ChangeBook", 
"book_id"=>"34880", "status"=>"inactive", "ts"=>"1617061982022", 
"controller"=>"books", "action"=>"modify", "format"=>"js"}, @filtered_env=nil, 
@filtered_path=nil, @protocol=nil, @port=nil, @method=nil, 
@request_method="PUT", @remote_ip="127.0.0.1", @original_fullpath=nil, 
@fullpath="/books/modify.js", @ip=nil, 
@headers=#<ActionDispatch::Http::Headers:0x00007f8a8ebc61f8 
@req=#<ActionDispatch::Request:0x00007f8a8f382338 ...>>>>, 
@_lookup_context=#<ActionView::LookupContext:0x00007f8a8f380bc8 
@details_key=nil, @cache=true, @prefixes=["books", "application"], 
@rendered_format=nil, @details={:locale=>[:en], :formats=>[:js, :html], 
:variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby, :coffee]}, 
@view_paths=#<ActionView::PathSet:0x00007f8a8f380ad8 
@paths=[#<ActionView::OptimizedFileSystemResolver:0x00007f8aa485ab98 
@pattern=":prefix/:action{.:locale,}{.:formats,}{+:variants,}{.:handlers,}", 
@cache=#<ActionView::Resolver::Cache:0x7f8aa485a968 keys=1 queries=0>, 
@path="/Users/jackrg/Documents/Novelty-Stats/app/views">]>, 
@html_fallback_for_js=true>, @_action_name="modify", @_response_body=nil, 
@marked_for_same_origin_verification=false, @_config={}, 
@_params=<ActionController::Parameters {"verb"=>"ChangeBook", 
"book_id"=>"34880", "status"=>"inactive", "ts"=>"1617061982022", 
"controller"=>"books", "action"=>"modify", "format"=>"js"} permitted: false>, 
@current_user=#<User id: 31610, email: "use...@example.com", password_digest: 
"$2a$04$dUuyYQDle.NHmNRnZB5sG.HWgZXMzbaFmNKM9jKIV00...", auth_token: 
"21a2cc0b56ce2911c4af42c092d0f595", activation_token: 
"53ecd2ac5d36e531171609630b7f2354", activated_at: "2021-03-29 23:52:58", 
password_reset_token: nil, password_reset_sent_at: nil, created_at: "2021-03-29 
23:52:58", updated_at: "2021-03-29 23:52:59", currency: nil, time_zone: nil, 
completed_setup_steps: ["profile", "amazon", "barnes_and_noble", "apple", 
"smashwords", "kobo", "create_space", "google", "d2d", "review", "scrape"], 
full_name: "Full Name", friendly_name: "Name", no_book_activation_help: nil, 
daily_email: -2, daily_update_email_status: nil, daily_update_email_sent_at: 
nil, scrape_status: nil, deleted_at: nil, stripe_id: nil, plan_name: "Basic", 
has_card: nil, cancelled_at: nil, cc_billing_failed_at: nil, extra_emails: nil, 
country_list: [], ranking_lists: [], min_date: nil, max_date: nil, 
payment_attempts: nil, referred_by: nil, referral_paid_at: nil, billing_period: 
"month", referral_code: nil, store_token: 
"4a98523a41fce0dbec56f693494182b9">>).modify(hash_including("verb"=>"ChangeBook",
 "book_id"=>"34880", "status"=>"inactive"))
           expected: 1 time with arguments: 
(hash_including("verb"=>"ChangeBook", "book_id"=>"34880", "status"=>"inactive"))
           received: 0 times

Am I wrong in mistrusting the message, given that removing the “.with” causes 
the test to pass? Or is there something not obvious going on? And while I’m at 
it, is there an easy way of coding the test so that it will automagically do 
all the conversions on the matching hash to prepare it for comparison to the 
params hash?

Software versions:
Ruby 2.4.10
Rails 5.1
RSpec 3.9.3
Capybara 3.9

-- 
You received this message because you are subscribed to the Google Groups 
"rspec" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to rspec+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rspec/6BD336E1-2097-42EB-91D0-CA3668505A8E%40pobox.com.

Reply via email to