トップ «前の日記(2011-02-02) 最新 次の日記(2011-02-13)» 編集

Route 477



2011-02-10

[book] 昨年売れた本ランキングとか

やろうと思ってたら2月になってしまったという。

1位

B003L7H9SA

2位

4774143898

3位

4798025623

4位

4873114454

5位

4777512924 4774142727 4774143243 4774143073 477414164X 4798119172 4797352604

というわけで1位は松江ラーメンでした(本じゃない!)

[rails] "Simple Omniauth"に従ってログイン処理を書いてみたのだが

RailsCastsの「Simple Omniauth」という回で、Omniauthを使ってTwitterログインを実装する方法が紹介されている。 「Simple」というのは、deviseとか使ってパスワードでもTwitterでもログインできるようにするんじゃなくて、OmniauthによるTwitterログインのみ提供する、という意味。

んでそれに従うと本当に簡単にTwitterログインができるんだけど、テストを書こうとしてちょっと困った。

config/routes.rbでは、以下のように〜/auth/twitter/callbackというURLにsessions#createを割り当てている。「resources :sessions」ではないので、〜/sessions/createというURLは存在しない。

 match "/auth/:provider/callback" => "sessions#create"

さて、test/functionals/sessions_controller_test.rbでcreateアクションのテストをしようとして

 post :create

と書くと、「:controller => "sessions", :action => "create"というルーティングは定義されていない」というエラーになってしまう。

こういうケースってどうしたら良いんでしょう?

ちなみにtest/integraton/でやろうとすると、post "/auth/twitter/callback" はできるんだけど、その前にrequest.env["omniauth.auth"]に値を入れる方法がないという…

とりあえず config/routes.rbにresources :sessionsを追加してテストを書いた。