flash.nowã®å 容ãç´æ¥ãã¹ããããã¨ã¯ä¸å¯è½
ç®æãä¾å¤ActiveRecord::StaleObjectErrorã®çºçã確èªã§ããã®ã§ããã®ç¶æ³ãé©åã«è¡¨ç¤ºããããã«ããããã¾ããã¦ããã¹ããå ã«æ¸ãã¦ã¿ããããã¦ãã¾ããã¦ãããã£ã...ã
ãã¹ã
- 欲ããã¡ãã»ã¼ã¸ããflash[:notice]ã«å ¥ã£ã¦ããã°è¯ãã¨èããã
# functionalãã¹ã: test/functional/slips_controller_test.rb ...ï¼ä¸ç¥ï¼... class SlipsControllerTest < ActionController::TestCase def test_shoould_not_update_slip_when_slip_in_lock 2.times do put :update, {:id =>'1', :slip =>{:number=>'1', :executed_on=>'2/14', :total_yen=>'1,000', :lock_version=>'0'}, :journal=>{"1"=>{:yen=>"1,000", :index=>"j943792544", :position=>"1", :comment=>"test"} } } end assert_response :success assert_template 'edit' assert_equal "ä»ã®ã¦ã¼ã¶ã¼ãç·¨éæ¸ã®ããä¿®æ£ã§ãã¾ããã", flash[:notice] ###### 追å ããè¡ end ...ï¼ä¸ç¥ï¼...
å®è£
- rescueã®ä¸ã§ãä¾å¤ã«ãã£ã¦å¦çãåå²ãã¦ã¿ãã
# ã³ã³ããã¼ã©ã¼: app/controllers/slips_controller.rb class SlipsController < ApplicationController ...ï¼ä¸ç¥ï¼... def update @slip = Slip.find(params[:id]) @journals = @slip.make_journals(params[:journal]) Slip.transaction do @slip.update_attributes!(params[:slip]) # ä¿ååã«DBã®journalã䏿¦ã¯ãªã¢ãããjournalã¯æ¯åãæ°è¦ä½æããããã¯ãªã¢ããªãã¨äºéç»é²ã«ãªã£ã¦ãã¾ãã @slip.journals.clear @journals.each {|journal| journal.save! if journal.input?} respond_to do |format| flash[:notice] = _('Slip was successfully updated.') format.html { redirect_to(@slip) } format.xml { head :ok } end end rescue => error_obj case error_obj when ActiveRecord::StaleObjectError flash.now[:notice] = "ä»ã®ã¦ã¼ã¶ã¼ãç·¨éæ¸ã®ããä¿®æ£ã§ãã¾ããã" else @journals.each {|journal| journal.valid? if journal.input?} end respond_to do |format| format.html { render :action => "edit" } format.xml { render :xml => @slip.errors, :status => :unprocessable_entity } end end ...ï¼ä¸ç¥ï¼...
åé¡
- ã¾ããã¦ãæ£ããå®è£ ã§ããã®ã«ããã¹ãã¯å¸¸ã«å¤±æãã¦ãã...ãflash[notice]ã使 ãnilã®ããã ã
- ãã©ã¦ã¶ã§ç¢ºèªããã¨ãã¡ããã¨ã¡ãã»ã¼ã¸ã¯è¡¨ç¤ºããã¦ããã®ã«ã
1) Failure: test_shoould_not_update_slip_when_slip_in_lock(SlipsControllerTest) [./test/functional/slips_controller_test.rb:96:in `test_shoould_not_update_slip_when_slip_in_lock' /Library/Ruby/Gems/1.8/gems/activesupport-2.0.2/lib/active_support/testing/default.rb:7:in `run']: --- /var/folders/7t/7txMamB3F5yDjLEWm5P6ik+++TI/-Tmp-/expect.2983.0 2008-04-10 14:14:07.000000000 +0900 +++ /var/folders/7t/7txMamB3F5yDjLEWm5P6ik+++TI/-Tmp-/butwas.2983.0 2008-04-10 14:14:07.000000000 +0900 @@ -1 +1 @@ -ä»ã®ã¦ã¼ã¶ã¼ãç·¨éæ¸ã®ããä¿®æ£ã§ãã¾ããã +
åå
- åå ã¯ããflash.nowãã«ãã£ãã
- flashã¯æ¬¡ã®ã¢ã¯ã·ã§ã³å®äºã¾ã§ä¿æãããç¹æ®ãªsession夿°ããªãã¤ã¬ã¯ãå ã§ã¡ãã»ã¼ã¸ã表示ãããæã«ããå©ç¨ãããããã¦ãflash.nowã«ä»£å ¥ããã¨ãä»ã®ã¢ã¯ã·ã§ã³ãå®äºããæç¹ã§å 容ãç ´æ£ããããã»ã¨ãã©ã¤ã³ã¹ã¿ã³ã¹å¤æ°ã¨åãæ¯ãèãã ã*1
- ãããããassert_equal "ä»ã®ã¦ã¼ã¶ã¼ã...", flash[:notice]ããå®è¡ããæç¹ã§ãflash[:notice]ã¯ç ´æ£ããã¦ããå¯è½æ§ã...ã
- put :updateã¯å¦çãç¾å ´ã«æãã¦ããassert_response :successããassert_template "edit"ããéã£ã¦ããã®ã§ã
ã¾ãã«ãã®éãã§ãã£ã...ã
解決
- ã¨ãããã¨ã§ããassert_equal "ä»ã®ã¦ã¼ã¶ã¼ã...", flash[:notice]ãããã¹ããããã¨ã¯ä¸å¯è½ã
- ã§ããflash[:notice]ã¯ã¡ãã»ã¼ã¸ã¨ãã¦å¿ ãæç»ãããã®ã§ããã¥ã¼ã®ä¸ã«ç®æãã¡ãã»ã¼ã¸ãå«ã¾ãã¦ããã°ããã§OKãªã®ã ã
- ã¨ãããããã¡ãã»ã¼ã¸ã表示ããã¦ãããã¾ã§ç¢ºèªãããã¨ã®æ¹ãéè¦ã ã以ä¸ã®ããã«ä¿®æ£ãã¦ã¿ãã
# functionalãã¹ã: test/functional/slips_controller_test.rb ...ï¼ä¸ç¥ï¼... class SlipsControllerTest < ActionController::TestCase def test_shoould_not_update_slip_when_slip_in_lock 2.times do put :update, {:id =>'1', :slip =>{:number=>'1', :executed_on=>'2/14', :total_yen=>'1,000', :lock_version=>'0'}, :journal=>{"1"=>{:yen=>"1,000", :index=>"j943792544", :position=>"1", :comment=>"test"} } } end assert_response :success assert_template 'edit' # assert_equal "ä»ã®ã¦ã¼ã¶ã¼ãç·¨éæ¸ã®ããä¿®æ£ã§ãã¾ããã", flash[:notice] assert_select "p", "ä»ã®ã¦ã¼ã¶ã¼ãç·¨éæ¸ã®ããä¿®æ£ã§ãã¾ããã" ###### 追å ããè¡ end ...ï¼ä¸ç¥ï¼...
ææ
ããã§ãã¹ãã¯éã£ãï¼ããã«ãã¦ããå®è£ ã¯ç°¡åãªã®ã«ãæ£ãããã¹ããæ¸ããªãããã«ããã§ããã£ã¦ãã¾ãããã®ç¹°ãè¿ãã ãããã§ã¯ä½ã®ããã®ãã¹ããªãã ã...ãã§ããååãã«èããã°ã以ä¸ã®ãããªå¹æãæãã¦ããã
- ç®æãæ©è½ãå®è£
ããåã«ãèªåã¨ãã¦ã¯ç¸å½ãè«ççã«èããããã«ãªã£ãã
- 以åã¯æ¬²ããæ©è½ãé©å½ã«æ³åããªãããéä¸ã§è©¦è¡é¯èª¤ãããã¨ãå¤ãã£ããï¼ä»ã¯ãã¹ãã§è©¦è¡é¯èª¤ãã¦ããã...ãï¼
- å ã«ãã¹ããæ¸ãã«ã¯ãç®æãæ©è½ãæç¢ºã§ããå¿ è¦ãããããã®æ©è½ã«ã¤ãã¦ãä»çµã¿ãããèããããã«ãªã£ãã
- Railsã®ä»æ§ã«å°ã詳ãããªã£ãæ°ãããã
- ãã¹ãã¯ããassert_XXXX ...ãã¤ã¾ããã... ã§ãããã¨ã«ééããªãããã¨ããçå®ãç©ã¿ä¸ãã¦ããã®ã§ãææ§ã«çè§£ãã¦ãããã¨ãçå®ã¨ãã¦æããã«ãªã£ã¦ããæ°ãããã
- ä¿®æ£ããçµæã«èªä¿¡ãæã¦ããï¼ä¸çªã®ã¡ãªãããããéå»ã®ãã¹ãããã¹ã¦éã£ã¦ããã¨ããå®å¿æãï¼
- ãã¹ãã¯ä¸ã¤ã®æ©è½ãå¥ã®ã¢ããã¼ããã表ç¾ãã¦ãããããªãã®ã
- å®è£ ããã³ã¼ãã¯ãè¨è¨å³ã¨ãã¦å é¨ã®ä»çµã¿ã表ç¾ãã¦ããã
- ãã¹ãã³ã¼ãã¯ãå é¨ã®ä»çµã¿ã¯ãã©ãã¯ããã¯ã¹ã§ãããã¥ã¢ã«ã¨ãã¦ãã®ä½¿ãæ¹ã表ç¾ãã¦ããã
ã¨ãããããããå°ãç¶ãã¦ã¿ãããã¹ãã«æ £ããå¿ è¦ãããã
*1:ããã§ã¯ããªãã¤ã³ã¹ã¿ã³ã¹å¤æ°ã§ã¯ãªããflashãå©ç¨ããã®ãã¨è¨ãã°ãã¬ã¤ã¢ã¦ããã¡ã¤ã«ã§ã¯å¸¸ã«ãflash[:notice]ãã§ã¡ãã»ã¼ã¸è¡¨ç¤ºãçµ±ä¸ã§ãã¦ãä½åãªæ¡ä»¶å¤å®ãä¸è¦ã§ãã·ã³ãã«ã«è¨è¿°ã§ããããã ã¨æãã