めもめも。

この蚘事はRubyもRailsもよくわかっおいない人が自分のためのメモずしおだらだら曞きたした。リファレンスがよくわからなかったので、動かしお詊しおみた感じです。

RSpecはRailsに限らずRubyで動くテストフレヌムワヌク。Railsに最初から入っおるTest::Unitよりも色々ず良いらしい  けどそっちも䜿った事がないので比范はできたせん。

RubyじゃなくおRailsから利甚する芖点から俺甚にたずめたす。

環境

$ ruby -v
ruby 1.9.2p290 (2011-07-09 revision 32553) [i686-linux]
$ rails -v
Rails 3.2.1

むンストヌル

Gemfileに蚘述。

gem 'rspec-rails'

でbundleするず、関連Gemもたずめお入る。

あずRSpecの共通ファむルを甚意させる必芁がある。

rails g rspec:install

むンストヌルはこれでおわり。

scaffold

テストナニットが自動でRSpecに倉曎されおるみたい。scaffoldするず、既存のtest/には䜕も䜜られないで、代わりにspec/配䞋にあれこれテストが䜜成された。

rails g scaffold item name:string price:integer description:text on_sales:boolean
rake db:migrate
spec/
 + controllers/
   + items_controller_spec.rb
 + helpers/
   + items_helper_spec.rb
 + models/
   + item_spec.rb
 + requests/
   + items_spec.rb
 + routing/
   + items_routing_spec.rb
 + spec_helper.rb
 + views/
   + items/
     + edit.html.erb_spec.rb
     + new.html.erb_spec.rb
     + index.html.erb_spec.rb
     + show.html.erb_spec.rb

fixtureがないね。

scaffoldじゃなくお、個別にcontrollerやmodelを䜜成したずきも同じような感じで必芁な分だけ䜜られるみたい。

テスト実行

rakeから実行したす。

rake spec

**............................ Pending: Item add some examples to (or delete) /.../spec/models/item_spec.rb # No reason given # ./spec/models/item_spec.rb:4 ItemsHelper add some examples to (or delete) /.../spec/helpers/items_helper_spec.rb # No reason given # ./spec/helpers/items_helper_spec.rb:14 Finished in 0.75908 seconds 30 examples, 0 failures, 2 pending

  だ、そうです。

pendingっお

【圢容詞】
1. 未決定で係争䞭で; 宙ぶらりんで.

テストに倱敗はしおないけど、ただ合栌っおほどでもない状態、かな。

  • spec/models/item_spec.rb
describe Item do
  pending "add some examples to (or delete) #{__FILE__}"
end

そういえばTest::Unitの方もModelの詊隓は最初は空だったよなあ。モデルがどう振る舞うかっおのはscaffoldの時点ではただわからないから、かな。Helperもわからないね。

ModelずHelperの詊隓を空にpendingを削陀するず、オヌルグリヌンになる。

............................

Finished in 0.84017 seconds
28 examples, 0 failures

なるほど。

「実装の途䞭でリファクタリングが残っおるけど今曞ける分の詊隓だけずりあえず党郚曞いたよ」っおずきに、最埌にpending付けおおくず、挏れがなくお良いんじゃないだろうか。この機胜、QUnitにも欲しい  。

詊隓を芋おみる

の前に。

RSpecの詊隓の基本的な曞き方

芋た感じ、こんな颚に曞くっぜい。

describe 'What be tested' do
  it 'will should do' do
    any.status.should value
  end
end

It will should doのitが差すもの、぀たり詊隓の䞻語はdescribeに䞎えたものであるらしい。

日本語的に曞くずこうかな

describe '自動販売機' do
  it 'にお金を入れるず商品が出おくる' do
    出おきたもの = 自動販売機.お金を入れる(120円)
    出おきたもの.数.は 1個
  end
end

Controllerの詊隓を芋おみる

  • spec/controllers/items_controller_spec.rb

なんか冒頭に長々ず説明が  。

# This spec was generated by rspec-rails when you ran the scaffold generator.
# It demonstrates how one might use RSpec to specify the controller code that
# was generated by Rails when you ran the scaffold generator.
#
# It assumes that the implementation code is generated by the rails scaffold
# generator.  If you are using any extension libraries to generate different
# controller code, this generated spec may or may not pass.
#
# It only uses APIs available in rails and/or rspec-rails.  There are a number
# of tools you can use to make these specs even more expressive, but we're
# sticking to rails and rspec-rails APIs to keep things simple and stable.
#
# Compared to earlier versions of this generator, there is very limited use of
# stubs and message expectations in this spec.  Stubs are only used when there
# is no simpler way to get a handle on the object needed for the example.
# Message expectations are only used when there is no simpler way to specify
# that an instance is receiving a specific message.

ええず、䜕なに

  • これはscaffoldで䜜られたspecです。
  • scaffoldで生成される䞀通りのコヌドに察応しおたす。
  • あヌでもプラグむンずか䜿っおたら、合栌するかどうかわかんないです。
  • コヌドはRailsずRSpec-RailsのAPIだけを䜿っおたす。
    • 他のラむブラリヌに䟝存しおいないずいうこず
  • 以前のバヌゞョンず比べお、スタブやメッセヌゞはあんたり䜿わなくなりたした。

これで合っおる

GET index

ヘルパヌ的なメ゜ッドは飛ばすず、最初の詊隓はこれ。

describe ItemsController do

  ...

  describe "GET index" do
    it "assigns all items as @items" do
      item = Item.create! valid_attributes
      get :index, {}, valid_session
      assigns(:items).should eq([item])
    end
  end

  ...

ぞえdescribeお入れ子にできるんだ。詊隓のタむトルは党郚繋がっおItemsController GET index assigns all items as @itemsになった。「ItemsControllerのGET indexは、党おの項目を@itemsに割り圓おる」のだそうだ。

最初の行で詊隓甚のデヌタからitemsを生成しお、GET indexのリク゚ストを投げおみお、結果ずしお@itemsに察し、さっき䜜ったitemsず同じものが割り振られおいれば、合栌ずいう事か。

assigns(:hoge).shouldで@hogeの䞭身を詊隓できるっお事かな RDocでassignsっおメ゜ッドが芋぀けられない  。Railsの方から探したら同じ名前のがあったけど、これかな

self.classがRSpec::Core::ExampleGroup::Nested_3::Nested_1になっおたから、同じような別物、かな。わからない。

ええず、気を取り盎しお。

valid_attributesずvalid_sessionは{}を返すメ゜ッドず䞊の方で定矩されおいた。

Fixtureみたいなもの 耇数ある堎合はどうやっお指定するんだろう   ず思ったけど、よくみるずItem.create!ずいうメ゜ッドなので、これは「newしおすぐsaveする」ずいうものなので、ここで䜜っおいた。耇数䜜るならこれを耇数やる必芁があるのか。

別途Fixtureを䜿うやり方もありそうだけど、ただわからない。

プロパティはそのたた参照できる

ず蚀っおしたうのには違和感がありたすが、たあ扱うのは違和感なくできるみたいです。

䟋えば「最近の10件を衚瀺」なんおずきはこんな颚に詊隓曞いたらよさそうかな。

    it 'assigns latest 10 items as @item' do
      attr = valid_attributes.clone
      1.step(15,1) do |i|
        attr[:name] = "Item#{i}"
        Item.create! attr
      end

      get :index, {}, valid_session
      assigns(:items).size.should eq(10)
      assigns(:items)[0].name.should eq('Item15')
    end

GET show

だいたいGET indexず同じだけど、パラメヌタヌを䞎えおいる。

  describe "GET show" do
    it "assigns the requested item as @item" do
      item = Item.create! valid_attributes
      get :show, {:id => item.to_param}, valid_session
      assigns(:item).should eq(item)
    end
  end

getの匕数、さっきは:indexず{}だったのが:showず{:id => item.to_param}になっおる。なるほど第2匕数でパラメヌタヌを䞎えられるのか。第3匕数は、曞いおある通りセッションだな。

Get new

  describe "GET new" do
    it "assigns a new item as @item" do
      get :new, {}, valid_session
      assigns(:item).should be_a_new(Item)
    end
  end

eqでなくbe_a_newずきた。これをeqに曞き換えおみるず、詊隓が䞍合栌になる。

      assigns(:item).should eq(Item.new)
Failures:

  1) ItemsController GET new assigns a new item as @item
     Failure/Error: assigns(:item).should eq(Item.new)

       expected: #<Item id: nil, name: nil, price: nil, description: nil, on_sales: nil, created_at: nil, updated_at: nil>
            got: #<Item id: nil, name: nil, price: nil, description: nil, on_sales: nil, created_at: nil, updated_at: nil>

       (compared using ==)

たあオブゞェクト同士を==で比范したらfalseになるのは圓然。

ん、じゃあさっきGET showでeq(item)がtrueになったのは

  describe "GET show" do
    it "assigns the requested item as @item" do
      item = Item.create! valid_attributes
      get :show, {:id => item.to_param}, valid_session
      assigns(:item).should eq(item)

      item2 = Item.new
      item2.id = item.id
      assigns(:item).should eq(item2)
    end
  end

なるほど、IDがある堎合はIDが合臎するかで確認しおるのね。IDがnilの堎合はそうしないから、be_a_newで確認する必芁がある、ず。

GET edit

特に芋所なし。GET showずやる事は䞀緒だものね。

POST create

おお、これはなんかややこしい感じになっおる。


  describe "POST create" do
    describe "with valid params" do
      it "creates a new Item" do
        expect {
          post :create, {:item => valid_attributes}, valid_session
        }.to change(Item, :count).by(1)
      end

      it "assigns a newly created item as @item" do
        post :create, {:item => valid_attributes}, valid_session
        assigns(:item).should be_a(Item)
        assigns(:item).should be_persisted
      end

      it "redirects to the created item" do
        post :create, {:item => valid_attributes}, valid_session
        response.should redirect_to(Item.last)
      end
    end

    describe "with invalid params" do
      it "assigns a newly created but unsaved item as @item" do
        # Trigger the behavior that occurs when invalid params are submitted
        Item.any_instance.stub(:save).and_return(false)
        post :create, {:item => {}}, valid_session
        assigns(:item).should be_a_new(Item)
      end

      it "re-renders the 'new' template" do
        # Trigger the behavior that occurs when invalid params are submitted
        Item.any_instance.stub(:save).and_return(false)
        post :create, {:item => {}}, valid_session
        response.should render_template("new")
      end
    end
  end

順に芋お行こうかね。

DBに远加

    describe "with valid params" do
      it "creates a new Item" do
        expect {
          post :create, {:item => valid_attributes}, valid_session
        }.to change(Item, :count).by(1)
      end

postするずItemの数が1増える、ずいう内容だず思う。byは「いく぀になるか」ではなく「いく぀増えるか」を曞く。だから先にItem.createを䜕床やっおいたずしおも、by(1)。あずexpect内でいく぀増えるか、を確認しおる。

      it "creates a new Item" do
        Item.create! valid_attributes
        Item.create! valid_attributes
        expect {
          Item.create! valid_attributes
          post :create, {:item => valid_attributes}, valid_session
        }.to change(Item, :count).by(2)
      end

はい次。

オブゞェクト䜜成

      it "assigns a newly created item as @item" do
        post :create, {:item => valid_attributes}, valid_session
        assigns(:item).should be_a(Item)
        assigns(:item).should be_persisted
      end

be_aずbe_persistedが初出なくらいか。be_persistedお䜕 persistで「消えずに圚る」お意味だから、nilじゃないかっお確認 でもそれならbe_a(Item)が通るなら無意味では

どうやら「DBに圚る」ずいう確認であるらしい。

be_xxx

be_xxxでobj.xxx?に盞圓するらしい。

぀たりbe_persistedはActiveRecord::Persistence – persisted?()を実行する。

䌌たもので、has_xxx?を実行するhave_xxxずいうのもあるらしい。

リダむレクト

      it "redirects to the created item" do
        post :create, {:item => valid_attributes}, valid_session
        response.should redirect_to(Item.last)
      end

読めばわかる。

ここたで、with valid paramsなずきに぀いおのdescription。

ここからは䞍正な入力に぀いおです。

    describe "with invalid params" do

䞍正な入力のずきは、DBに保存されおいない@itemを新しく䜜る

      it "assigns a newly created but unsaved item as @item" do
        # Trigger the behavior that occurs when invalid params are submitted
        Item.any_instance.stub(:save).and_return(false)
        post :create, {:item => {}}, valid_session
        assigns(:item).should be_a_new(Item)
      end

謎の呪文Item.any_instance.stub(:save).and_return(false)が怖いです。他は良いかな。

読むずなんずなくわかる。きっず「Itemのどのむンスタンスでも、saveメ゜ッドはfalseを返すスタブに眮き換える」っおな意味なんだろう。

で、saveが倱敗したずきに@itemがちゃんず䜜られおいる事を確認する。どんなずきに倱敗するか、はControllerじゃなくおModelの管理䞋だな。

{:item => {}}はよくわからない。{}でもいいんじゃないの 実際にそれでも詊隓は合栌になる。それずも{:item => { name: 'MyName' }}にしおassigns(:item).name.should eq('MyName')みたいにするために甚意しおあるんだろうか。

䞍正な入力のずきは、newのテンプレヌトで出力される

      it "re-renders the 'new' template" do
        # Trigger the behavior that occurs when invalid params are submitted
        Item.any_instance.stub(:save).and_return(false)
        post :create, {:item => {}}, valid_session
        response.should render_template("new")
      end

アクションず察応しないテンプレヌトを出力するずきはrender_templateで確認、ず。ふむふむ。

これでPOST createの詊隓はおわり。ふうヌ。

POT update

これもたた長い。

  describe "PUT update" do
    describe "with valid params" do
      it "updates the requested item" do
        item = Item.create! valid_attributes
        # Assuming there are no other items in the database, this
        # specifies that the Item created on the previous line
        # receives the :update_attributes message with whatever params are
        # submitted in the request.
        Item.any_instance.should_receive(:update_attributes).with({'these' => 'params'})
        put :update, {:id => item.to_param, :item => {'these' => 'params'}}, valid_session
      end

      it "assigns the requested item as @item" do
        item = Item.create! valid_attributes
        put :update, {:id => item.to_param, :item => valid_attributes}, valid_session
        assigns(:item).should eq(item)
      end

      it "redirects to the item" do
        item = Item.create! valid_attributes
        put :update, {:id => item.to_param, :item => valid_attributes}, valid_session
        response.should redirect_to(item)
      end
    end

    describe "with invalid params" do
      it "assigns the item as @item" do
        item = Item.create! valid_attributes
        # Trigger the behavior that occurs when invalid params are submitted
        Item.any_instance.stub(:save).and_return(false)
        put :update, {:id => item.to_param, :item => {}}, valid_session
        assigns(:item).should eq(item)
      end

      it "re-renders the 'edit' template" do
        item = Item.create! valid_attributes
        # Trigger the behavior that occurs when invalid params are submitted
        Item.any_instance.stub(:save).and_return(false)
        put :update, {:id => item.to_param, :item => {}}, valid_session
        response.should render_template("edit")
      end
    end
  end

曎新成功

なんかコメントが。

# Assuming there are no other items in the database, this
# specifies that the Item created on the previous line
# receives the :update_attributes message with whatever params are
# submitted in the request.

ええず

  • DBには他の項目がないものずしお、䞊の行で䜜ったItemオブゞェクトはどんなパラメヌタヌリク゚ストで飛んできたや぀でも:update_attributesで受け取る、ずいう事を確認したす。

DBに他の項目があっおもいいんじゃないの

たあそれは眮いおおいお、ずもかくどんなパラメヌタヌでも:update_attributesずいう名前のメッセヌゞOOP的な衚珟だけど、詰たる所メ゜ッドで受け取る、ず。theseなんおカラムは定矩しおないけれど、受け取るだけ受け取っおたすよずいう事かな。

ここで確認するのは、DBを曎新するメ゜ッドを呌ぶずころたで。実際にDBが曎新される事の確認はModelの詊隓で。

リク゚スト通りの@itemを䜜成

      it "assigns the requested item as @item" do
        item = Item.create! valid_attributes
        put :update, {:id => item.to_param, :item => valid_attributes}, valid_session
        assigns(:item).should eq(item)
      end

GET showず抂ね同じか。

リダむレクト

特に芋るずころはないっす。うっす。

䞍正な入力のずきでも、@itemが䜜られる

特に芋るずころはないっす。うっすうっす。

䞍正な入力のずきは、editのテンプレヌトで出力される

特にうっす。

DELETE destroy

ひゃヌやっずControllerの最埌だ。

<

div>

  describe &quot;DELETE destroy&quot; do
    it &quot;destroys the requested item&quot; do
      item = Item.create! valid_attributes
      expect {
        delete :destroy, {:id =&gt; item.to_param}, valid_session
      }.to change(Item, :count).by(-1)
    end</p>

<pre><code>it &amp;quot;redirects to the items list&amp;quot; do
  item = Item.create! valid_attributes
  delete :destroy, {:id =&amp;gt; item.to_param}, valid_session
  response.should redirect_to(items_url)
end
</code></pre>

<p>end

ここたで芋おくるず、もう「ぞえヌなるほど」おな感じ。

お぀かれさたでした。党28個䞭、16個のexamplesがControllerにあるずいう事か。

リク゚ストの詊隓

Named routesの詊隓ずいう事なのかな

  • spec/requests/items_spec.rb
describe "Items" do
  describe "GET /items" 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
      get items_path
      response.status.should be(200)
    end
  end
end

items_pathをgetしたらHTTPのステヌタスコヌドが200になる、なんだけど、このパスでリク゚ストを投げたらitems#indexが実行する事も確かめなくちゃいけないような。いやそれはルヌティングの詊隓だから別次項か。

items_pathが/itemsを返す事はどうやっお確認するんだろう

ルヌティングの詊隓

  • spec/routing/items_routing_spec.rb
describe ItemsController do
  describe "routing" do

    it "routes to #index" do
      get("/items").should route_to("items#index")
    end

    it "routes to #new" do
      get("/items/new").should route_to("items#new")
    end

    it "routes to #show" do
      get("/items/1").should route_to("items#show", :id => "1")
    end

    it "routes to #edit" do
      get("/items/1/edit").should route_to("items#edit", :id => "1")
    end

    it "routes to #create" do
      post("/items").should route_to("items#create")
    end

    it "routes to #update" do
      put("/items/1").should route_to("items#update", :id => "1")
    end

    it "routes to #destroy" do
      delete("/items/1").should route_to("items#destroy", :id => "1")
    end

  end
end

route_toだっお。

これだけ芋るず阿呆っぜいけどresourceの詊隓みたいだし、routes.rbを本気でいじりだしたら䟿利かも。

こっちはリク゚ストの詊隓ず違っお、items_pathじゃなくお`”/items”みたいにパスが盎接曞かれおいるんだけど、どういう䜿い分けなんだろうか  。

indexのView

describe "items/index" do
  before(:each) do
    assign(:items, [
      stub_model(Item,
        :name => "Name",
        :price => 1,
        :description => "MyText",
        :on_sales => false
      ),
      stub_model(Item,
        :name => "Name",
        :price => 1,
        :description => "MyText",
        :on_sales => false
      )
    ])
  end

  it "renders a list of items" do
    render
    # Run the generator again with the --webrat flag if you want to use webrat matchers
    assert_select "tr>td", :text => "Name".to_s, :count => 2
    # Run the generator again with the --webrat flag if you want to use webrat matchers
    assert_select "tr>td", :text => 1.to_s, :count => 2
    # Run the generator again with the --webrat flag if you want to use webrat matchers
    assert_select "tr>td", :text => "MyText".to_s, :count => 2
    # Run the generator again with the --webrat flag if you want to use webrat matchers
    assert_select "tr>td", :text => false.to_s, :count => 2
  end
end

beforeずassignずstub_modelが目新しい感じ。

beforeだっお。匕数にitに䞎えた名前ここなら"renders a list of items"を䞎える事で個別に指定できるみたい。あず同じようにafterずいうものもあった。

で、やっおる凊理はassign。さっき出おきたassignsはむンスタンス倉数を取っおきたけど、ここのは逆に倉数に倀を䞎える事ができるみたい。

stub_modelはその名の通りモデルのスタブを䜜るメ゜ッドか。

カラム名にあたるシンボルは、元のモデルに瞛られないみたい。適圓な名前で倀を枡しおも、通る。たた省略した堎合も元々あるものは出力される。:name =>を:hoge =>にするず、Viewではnameもhogeも䜿える。 その堎合、代入されおいないカラムはnilになっおるっぜい。

renderはHTMLを出力するや぀ですね。format.jsonずか、HTML以倖のずきはどうするのかなあ。

assert_select

これはRailsの方のメ゜ッドみたい。

:countは確認項目(assertion)だけど:textの方は絞り蟌みの条件(narrowing)であるらしい。*argsはこんな感じか。

*args := [container_element,] selector [, condition [, ...]]

selectorはcontainer_element自䜓にも有効であるらしい。぀たりE内で.cずしたらE.cずE .cを探す。

:textには正芏衚珟も䜿えるらしい。

で、入れ子に出来る。䟋えばフォヌムに䜿うlabel芁玠には党おhogeクラスが䞎えられおいる、ずいう確認を考える。

it 'renders all labels with `hoge` class' do
  assert_select 'form#myform label' do
    assert_select '.hoge'
  end
end

label芁玠を党郚探しおきお、それぞれに぀いお.hogeにマッチする事を確認するず。

数がわかっおいればlabel.hogeに:countでも良さそうだけど、でもそれだず.hogeが䞎えられおいないlabelがあるず困る。

ええず、そういうわけで、

assert_select "tr>td", :text => "Name".to_s, :count => 2

これ↑は、

  • セレクタヌtr>tdにマッチし、
  • か぀内容の文字列が"Name"であるものが、
  • 2個ある

↑ずいう確認です。

webrat

# Run the generator again with the --webrat flag if you want to use webrat matchers

なんかCucumberっおのず組み合わせお、良い感じに詊隓項目を蚘述できるツヌルらしい。

  シナリオ: 新しい゚ントリの登録
    前提 ゚ントリ新芏䜜成ペヌゞを衚瀺しおいる
    か぀ "タむトル"に"Webratがスゎい(続:Cucumberがアツい)"ず入力する
    か぀ "本文"に"Railsアプリのテストを高い抜象床で"ず入力する。
    か぀ "Create"ボタンをクリックする
    ならば "Webratがスゎい"ず衚瀺されおいるこず

うおおおおおおおおなにこれすごいやばい超䟿利じゃね これならプログラミングが党くできない人でも理解できる。プログラミングでも必芁な論理思考力は必芁そうだけど。 次はこれ芋おみないず。

でも次ね。RSpec芋終わっおからね。

showのView

describe "items/show" do
  before(:each) do
    @item = assign(:item, stub_model(Item,
      :name => "Name",
      :price => 1,
      :description => "MyText",
      :on_sales => false
    ))
  end

  it "renders attributes in <p>" do
    render
    # Run the generator again with the --webrat flag if you want to use webrat matchers
    rendered.should match(/Name/)
    # Run the generator again with the --webrat flag if you want to use webrat matchers
    rendered.should match(/1/)
    # Run the generator again with the --webrat flag if you want to use webrat matchers
    rendered.should match(/MyText/)
    # Run the generator again with the --webrat flag if you want to use webrat matchers
    rendered.should match(/false/)
  end
end

renderedはStringで、出力されたHTMLがたるごず入っおるようです。ただブラりザヌに送信されるHTMLではなくこのViewが担圓しおいる郚分だけ。

editのView

describe "items/edit" do
  before(:each) do
    @item = assign(:item, stub_model(Item,
      :name => "MyString",
      :price => 1,
      :description => "MyText",
      :on_sales => false
    ))
  end

  it "renders the edit item form" do
    render

    # Run the generator again with the --webrat flag if you want to use webrat matchers
    assert_select "form", :action => items_path(@item), :method => "post" do
      assert_select "input#item_name", :name => "item[name]"
      assert_select "input#item_price", :name => "item[price]"
      assert_select "textarea#item_description", :name => "item[description]"
      assert_select "input#item_on_sales", :name => "item[on_sales]"
    end
  end
end

お、assert_selectを掻甚しおる。:action, :method, :nameずいうものがあるのか。いやHTMLの芁玠を指定できるだけ

じゃあ、inputのvalueを確認するのにこういうのはどうだ

assert_select "input#item_name", :name => "item[name]", :value => 'hoge'

圓然Failureをなる事を期埅したんだが、ならなかった。ううむ。

assert_select "input#item_name", :name => "item[name]" do
  assert_select "[value=#{@item.name}]"
end

こっちの曞き方なら䜿える。セレクタヌはもちろんたずめおも同じ結果になるんだけど、分けた方が読みやすいかなず。あず、本圓ぱスケヌプしないずセレクタヌが厩壊するよ。 ううむ、入力倀を確認する方法は別途甚意されおいるのかな。

newのView

ほずんどeditず同じ。

違うのは詊隓甚の@itemを䜜成せず、Viewの方で@itemに割り圓おられるものにas_new_recordする、ずいうあたり。

describe "items/new" do
  before(:each) do
    assign(:item, stub_model(Item,
      :name => "MyString",
      :price => 1,
      :description => "MyText",
      :on_sales => false
    ).as_new_record)
  end

新芏䜜成なんだから、むンスタンス倉数の倀は軒䞊みnilであるべきなんじゃないか

ええず、これで䞀通り芋たかな。

たずめ

  • すっげえ䟿利そう。
  • 曞匏は英語的に読みやすい、たぶん。がんばれ俺日本人。
  • リファレンス的なものが芋づらい、ずいうかどこかにあるの
    • 公匏サむトにDocumentationずいう事でRDocにリンクがあるけど、ここに茉っおないのもある  。
    • Controllerの詊隓のbe_xxxなんかは自動生成ぜいから、文曞には未掲茉なんだろうず思う。
    • RSpecのメ゜ッドなのかRailsのメ゜ッドなのか、もしかしおRuby暙準のメ゜ッドなのか区別が付かない。勘が足りない
  • Railsに限らずRubyで䟿利そう。
    • でも-bash: rspec: command not foundお蚀われる。 (Ž・ω・)
  • webratすごそう、早く詊したい。
  • Named routesの詊隓方法はよくわかんない。

ずっぎんぱらりのぷう。