用let重构rspec

时间:2013-11-30 04:33:29

标签: ruby-on-rails rspec railstutorial.org

我正在关注Michael Hartl的Ruby on Rails教程。 如何使用let重构此代码而不是使用实例变量?

describe User do    

  before do
    @user = User.new(name: "Example User", email: "user@example.com")
  end    

  subject { @user }    

  it { should respond_to(:name) }
  it { should respond_to(:email) }    

  it { should be_valid }    

  describe "when name is not present" do
    before { @user.name = " " }
    it { should_not be_valid }
  end
end

我试图自己重构代码但失败了。

describe User do
  let(:user) { User.new(name: "Example User", email:"foo@example.com") }    

  subject { user }    

  it { should respond_to(:name) }
  it { should respond_to(:email) }  

  it { should be_valid }    

  describe "when name is not present" do
    # ???
    let(:name) { " " } 
    it { should_not be_valid }
  end
end

1 个答案:

答案 0 :(得分:1)

对于“当名称不存在时”示例组,这就足够了:

describe "when name is not present" do
  before { subject.name = '' }
  it { should_not be_valid }
end

从您单独发布的代码中,使用:name设置let()没有任何附加价值。