how to test observe with rspec in ruby on rails.

來源:互聯網
上載者:User

在測試 model時,有一個改動是observe, 我想一把測試了,可是這個observer在rspec中一直不肯執行. 但在console下的test env沒有任何問題。

哥花了一天的時間來調試,終於還是沒有搞定,有遇到此類的問題的朋友可以協助我一下,謝謝。

用我的垃圾英語在rails的mail list上問了一下,說要我看下面的東東

http://stackoverflow.com/questions/33048/how-would-you-test-observers-with-rspec-in-a-ruby-on-rails-application

上面主要還是推薦observer和model分開來測試,在observer中model的構建用mock.

試著寫了一下,覺得還不錯,記錄一下。

 

測試代碼

 1 require 'spec_helper'
2
3 describe ContactInfoObserver do
4 before(:each) do
5 @phone = "15812345678"
6 @obs = ContactInfoObserver.instance
7 end
8
9 it ' should be change contact my user id when contact registered' do
10 user = mock_model(UserInfo)
11 UserInfo.stub(:find_by_phone).and_return(user)
12 m = mock_model(ContactInfo, :phone => @phone)
13 m.should_receive("my_user_id=").with(user.id)
14 @obs.before_create m
15 end
16
17 it ' should not change contact my user id when contact unregistered' do
18 UserInfo.stub(:find_by_phone).and_return(false)
19 m = mock_model(ContactInfo, :phone => @phone)
20 m.should_not_receive("my_user_id=")
21 @obs.before_create m
22 end
23
24 end

 

observer

 1 class ContactInfoObserver < ActiveRecord::Observer
2 def before_create(contact_info)
3 #contact_info.logger.error("model "+contact_info.inspect)
4 user = UserInfo.find_by_phone contact_info.phone
5 puts "model observer"+user.inspect
6 if user
7 puts 'at here'
8 contact_info.my_user_id= user.id
9 end
10 end
11 end

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.