メモ
spec/view 配下を見てて assert_select なるモノがあることを初めて知ってたりして。知らんうちにプレゼンテーションな部分まで確認できるようになっとるんですね。
view のあたりは別途手を入れることになるだろう、と思いつつその時にハマるんだろうな、と思いつつ。
とりあえづ
devise なナニを盛り込んで spec を作って実機 deploy してみる方向。
今は bundle install してるだけな状態なので、もう少し諸々を弄る必要があるんですが、とりあえずこれまでのナニな commit を作っておく必要があるな。devise はこの commit にカブセる形を取るか。
db/migrate/ の中身を削除して他は全部盛り込むか。で、commit 作ってヤること的には
- rails generate devise:install
- config/environments/development.rb 修正
- これ production で動かすときにはドメインを云々、ってありますね、どうしよう
- app/views/layouts/application.html.erb 修正
- public/index.html 削除
- config/routes.rb 修正
- rails generate controller welcome index
- rails generate devise:views
- rails generate devise user
- マイグレーション実行
- ルーティングの修正
- トップページの修正
- コントローラの修正
以降続くんですが、spec とかどこ行った、というカンジですな。Devise::TestHelpers というものがある、ってのは存知あげておるのですがどうしたものやら。
現時点では
- 未ログイン時の routing
- ログイン時の routing
が確認できれば良い、ってことにします。とは言え、ログイン後に一覧を取得時、今は無条件にしてますが、ログインアカウントの情報がリクエストに入ってないと駄目、ってことになるんだけどこのあたりは spec の範疇外?
# 範疇外、な気がしてきてます
盛り込んだ
bundle exec rspec したら failure 沢山出た。基本的に試験側でも devise てきにログインしとかなきゃ、なソレをスルーしている箇所が沢山あるはず。
factory_girl
なんか rails c で Factory.define したら Duplicate 云々ってエラーになるな、って思ってたら spec/factories.rb を自動で読みこんでやがる。これ系って昔 MFC だとかなナニで知ってること前提な知識が膨大な世界だな。なんとなく脳が弱いワタシには非常に辛い。
あるいは
spec/requests な試験しててテーブル無いとか言われて test.sqlite3 にテーブルができてないのをようやく発見したりとか我慢の限界。
個別に動かす場合にゃ
$ rake db:test:prepare
すりゃ良いのか。そんなの知らんわ、というナニはスルー。
で、云々してて以下なカンジで試験が通った。意味不明。ハラ立つので全部引用。
require 'spec_helper' describe "CloudStackApis" do def mock_cloud_stack_api(stubs={}) @mock_cloud_stack_api ||= mock_model(CloudStackApi, stubs).as_null_object end def login(user) # post_via_redirect user_session_path, 'user[email]' => user.email, 'user[password]' => user.password post user_session_path, 'user[email]' => user.email, 'user[password]' => user.password end describe "GET /cloud_stack_apis (login)" do it "works! (now write some real specs)" do # Run the generator again with the --webrat flag if you want to use webrat methods/matchers user = Factory.create(:user) login(user) CloudStackApi.stub(:find).with(:one, :from => '/client/api', :params => {:command => 'listVirtualMachines'}) { [mock_cloud_stack_api] } get cloud_stack_apis_path response.status.should be(200) end end describe "GET /cloud_stack_apis (not login)" do it "works! (now write some real specs)" do # Run the generator again with the --webrat flag if you want to use webrat methods/matchers CloudStackApi.stub(:find).with(:one, :from => '/client/api', :params => {:command => 'listVirtualMachines'}) { [mock_cloud_stack_api] } get cloud_stack_apis_path response.status.should be(302) end end end
ヒッカカッてたのは上側のログインしないといけないナニ。とりあえずパスしたので良し、ってことにして次。なんでしょ、まるで切れないカマで広大な土地の草刈りをしてるようです。
その後、controller なテスツ (というか spec) も以下を before に追加して
@user = Factory.create(:user) sign_in @user
無事にパスしてます。後は pending なナニをなんとかせねば。
そういえば
別件で gitsis-web-admin を云々しとるのですが、そこの .gitignore が以下。
.DS_Store .idea doc log/* tmp/* config/application.yml config/database.yml db/*.sqlite3 db/schema.rb
成程。これは別途真似をしておく方向で。