RSpec检查数据库字段有一个特定的字符串

时间:2013-08-09 14:40:31

标签: ruby-on-rails rspec

我正在尝试确保在创建用户时,“measurement_units”字段的默认字符串为imperial。当我通过创建用户进行测试时,我得到了所需的结果,但是当我使用我的规范测试时,我得到了`got:nil'

知道我在规范中做错了什么吗?

require 'spec_helper'
require 'cancan/matchers'

describe User do
    subject(:user) { User.new(email: 'test@test.com', password: '12345678', goal_id: '1', experience_level_id: '1', gender: 'female') }

  it "should be assigned measurement_units of imperial" do
    user.measurement_units.should eq("imperial") 
  end
end

以上测试返回:

1) User should be assigned measurement_units of imperial
     Failure/Error: user.measurement_units.should eq("imperial")

       expected: "imperial"
            got: nil

       (compared using ==)
     # ./spec/models/user_spec.rb:20:in `block (2 levels) in <top (required)>'

我知道这可能是非常基本的,但我无法弄清楚。

编辑:

我在用户模型的创建过滤器中分配初始measurement_units,如下所示:

class User < ActiveRecord::Base

before_create :assign_initial_settings

def assign_initial_settings
  self.measurement_units = "imperial"
end

1 个答案:

答案 0 :(得分:2)

你的回调是before_create,但你实际上并没有在测试中调用User.create - 因此你的回调没有运行。

如果您将new替换为create,您应该会看到您期望的行为。