使用Rspec进行rails测试详解1-Transactions

当我运行测试时,需要用到测试数据,测试数据可以通过工具构造,也可以手工添加。在rspec中,需要注意一下问题:

1、配置 spec_helper.rb

在我们install Rspec时,会自动添加一个名为spec_helper.rb的文件,文件中有一个默认的配置项:

RSpec.configure do |config|
  config.use_transactional_fixtures = true
end
当该配置设置为true,则运行每个测试之前,都会清空测试数据库,这样,每个测试都是互不干扰的。如果要手动管理你的测试数据库,可以将以上配置设置为false。

2、before (:each) 

当定义before(:each),在其每个测试之前,都会先执行该处代码,目地是重新装载其中定义的变量,设置的测试环境等。

请看下面的示例:

  context 'before_each' do
     before(:each) do
       @count ||= 1
      end
     it '#test1' do
      @count += 1
      puts "count= #{@count}"
 end it '#test2' do @count += 1 puts "count= #{@count}" end end
运行测试结果,会在后台输出两遍count=2
3、before(:all)

当定义before(:all),在执行测试之前,会调用一次该处代码,里面定义的值可能随着测试的进行而改变。

请看下面的示例:

context 'before_each' do
     before(:each) do
       @student = FactoryGirl.create(:student) #student.age = 15
      end
     it '#test1' do
      @student.age = @student.age +1
      puts "age= #{@student.age}"
      end
     it '#test2' do
      @student.age = @student.age +1
      puts "age= #{@student.age}"
      end
  end
测试结果为:

age=16

age=17 # 可以看出,test1所做的修改被用到了test2测试中。

注意:

*故国在before(:all)之后使用了before(:each)重新加载对象,则类似于 before(:each)

*使用before之后,可以通过after(:all)删除对象

before(:each) do
  @student.reload
end
after(:all) do :
  @student.destroy
end







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值