ちと暇ができたのでじっくり試していていくつか解りました。

form_tag({ :action => action} ,opt)
form_tag({ :action => action, :controller => controller} ,opt)

このケースで action に :show , controllerに :weather を入れて試すと
  No route matches {:action=>"show"}
  No route matches {:action=>"show", :controller => "weather"}

のエラーが出るのですが,config/routes.rb で明示的に
  get "/weather/show" => "weather#show"
を定義すると(後者で)でなくなりました。

なぜ
  resources :weather

では駄目なのかの疑問は残りますが、明示的に定義されているrouteでテストす
れば良いので、できていなかったテストもできるようになりました

> とりあえず不十分ですが解決しました。
>> class ActionButtomHelperTest < ActionView::TestCase
>>     include ActionButtonHelper
>>
>>     must "form_buttom option なし" do
>>       assert_equal "",  form_tag(:action => :index)
>>     end
>> end
> 
> でいけました。
> あ、いや
>    assert_equal "",  form_tag('index')
> でした。(むろん 期待値 "" では失敗しますが)
> 
> 調べようとしていた ActionButtonHelper に
>      case action
>      when Symbol  ; form_tag({ :action => action} ,opt)
>      when String  ; form_tag(action ,opt)
>      end
> というのがあって、その Symbol の所をコピペしてたんですが、
> ActionView::TestCase ではこちらはうまくいかなくて、Stringの
> ケースでは通るようです。
> 今回のリファクタリングでは String だけでテストしてもまぁよさげ
> なので、これで行きます。
> Symbolのケースでもうまくいくやり方は知っておきたいので、よろしくおねがい
> します。
> 
>