Ruby on rails開發從頭來(windows)(二十五)-測試Controller

來源:互聯網
上載者:User

這次我們繼續測試Controller,還是Store_controller。

1.先來測試測試CheckOut功能,給store_controller_test.rb添加代碼:

def test_checkouttest_add_to_cartget :checkoutassert_response :successassert_not_nil assigns(:order)assert_template "store/checkout"end

注意這裡調用了另一個test方法test_add_to_cart,因為如果購物車為空白的話,我們將無法轉到預想的checkout頁面去,所以我們必須讓購物車(cart)裡至少有一件商品(item)。所以我們沒有寫重複代碼,而是調用了test_add_to_cart方法來使購物車中有商品。

2.再來測試儲存訂單功能,我們通過save_order的Action來將儲存order,我們的辦法就是:cart將items存放到order的model裡,然後由order儲存到資料庫,然後將cart置空,再重新置放到購物的store頁面,並且顯示一個友好的訊息。現在在store_controller_test.rb添加代碼:

def test_save_invalid_ordertest_add_to_cartpost :save_order, :order => {:name => 'fred', :email => nil}assert_response :successassert_template "store/checkout"assert_tag :tag => "div", :attributes => { :class => "fieldWithErrors" }assert_equal 1, session[:cart].items.sizeend

上面是先測試無效的order,我們通過給save_order的Action一個無效的order,當無效的order被提交的時候,我們使用assert_tag來檢查響應的div節點的是否是fieldWithErrors類型。

3.下面我們再來測試一個有效order的儲存。

def test_save_valid_ordertest_add_to_cartassert_equal 1, session[:cart].items.sizeassert_equal 1, Order.countpost :save_order, :order => @valid_order_for_fred.attributesassert_redirected_to :action => 'index'assert_equal "Thank you for your order.", flash[:notice]follow_redirectassert_template "store/index"assert_equal 0, session[:cart].items.sizeassert_equal 2, Order.find_all.sizeend

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.