新手关于Rails中Rspec测试的问题

时间:2011-03-22 08:26:54

标签: ruby-on-rails ruby-on-rails-3 rspec rspec2

我是rspec测试的新手。我在Rails中有两个关于rspec测试的问题。

如果我的 Car 模型是 ActiveRecord

class Car < ActiveRecord::Base
  ...
  def get_color
    ..
  end
end 

问题1。在rspec测试中(我已准备好所有宝石和配置),有什么区别

before(:each) do
    @my_car=Factory.create(:car, params)
end

before(:each) do
    @my_car=Car.new(params)
    @my_car.save
end

(我的意思是内部 rspec测试范围有什么区别,他们在rspec测试中没有相同的效果?不仅在之前(:每个)做语句,但是也描述......做声明)

问题2。正如您在 car 模型中看到的,有一个实例函数get_color,我可以在我的rspec测试中调用此实例函数吗?以下方式?

@my_car=Factory.create(:car, params)
@my_car.get_color #Can I call instance method in rspec test?

我试过这个,但似乎实例方法没有按照rspec测试中的预期返回结果。但是在rspec测试代码之外工作,但我不确定。

任何人都可以让我清楚这两个问题吗?

2 个答案:

答案 0 :(得分:3)

问题1:

2声明与使用Factory girl之间没有区别。使用Factory girl,您可以在创建Object期间执行某些默认行为。在第二种情况下,你需要自己动手。

问题2:

您需要测试您的方法。如果通过示例返回0,您可以添加:

it 'should return 0' do
  @my_car.get_color.should == 0
end

我们不能更具体地使用更多代码

答案 1 :(得分:0)

Q1:虽然工厂更灵活,但我更喜欢它们,它实际上是一样的。

Q2:您可以执行@ my_car.get_color,但只是执行它并不意味着什么。您需要检查它是否满足条件(可能应该使用)或者将其存根以返回您想要的值,而不实际执行(常见的rspec实践)。