how to test observe with rspec in ruby on rails.

本文介绍了一个使用RSpec测试Rails应用中Observer的具体案例。作者通过mock model和stub方法解决了Observer测试难题,并分享了有效的测试代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在测试 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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值