2011-02-23 83 views
1

我有这些验证:为什么RSpec在验证失败?

it "should have 100 adventure points" do 
    user = User.new 
    user.adventure_points.should == 100 
end 

it "should be level 1" do 
    user = User.new 
    user.level.should == 1 
end 

it "should have 10 sapphires" do 
    user = User.new 
    user.sapphires.should == 10 
end 

然后,我也有我的移民:

t.string :name,       :limit => 20 
    t.integer :strength_points,    :default => 0 
    t.integer :dexterity_points,    :default => 0 
    t.integer :magic_points,     :default => 0 
    t.integer :accuracy_points,    :default => 0 
    t.integer :health_points,    :default => 0 
    t.integer :level,      :default => 1 
    t.integer :adventure_points,    :default => 100 
    t.integer :sapphires,     :default => 10 
    t.integer :duel_wins,     :default => 0 
    t.integer :duel_losses,     :default => 0  
    t.string :image_url  
    t.integer :strength 

当我运行RSpec的我得到:

A new User 
    is not valid without a name 
    is not valid without a first class 
    is not valid without a password 
    should have 100 adventure points 
    should be level 1 (FAILED - 1) 
    should have 10 sapphires (FAILED - 2) 

Failures: 

    1) A new User should be level 1 
    Failure/Error: user.level.should == 1 
     expected: 1 
      got: nil (using ==) 
    # ./spec/models/user_spec.rb:28 

    2) A new User should have 10 sapphires 
    Failure/Error: user.sapphires.should == 10 
     expected: 10 
      got: nil (using ==) 
    # ./spec/models/user_spec.rb:33 

为什么会出现这些错误在水平上,蓝宝石,但它适合adventure_points?此外,如果我打开一个控制台并执行User.new,我会得到预期的默认值。这里开什么东西?

回答

1

自己找到了解决方案,很狡猾的一个。我不得不跑耙:测试:准备,因为测试数据库没有灯具数据,并没有准备:P

1

数据库默认值在保存模型之前未设置。试试:

 
it "should have 100 adventure points" do 
    user = User.create 
    user.adventure_points.should == 100 
end 
+0

我想到了这一点,但它不起作用。尽管它使用User.new设置,但您可以看到adventure_points运行良好 – Spyros 2011-02-23 02:23:31