Rspec Rails - 名称应该是有效的 - 一些澄清

Spy*_*ros 6 rspec ruby-on-rails

这些天我正在进入rspec,试图让我的模型更加精确和准确.关于rspec,有些事情对我来说仍然有些奇怪,所以我觉得如果有人能澄清那就好了.

假设我有一个用户模型.这个有一个:名字.名称应该在4..15个字符之间(这是次要目标,起初它必须存在).所以现在我在想:以确保这种情况发生的方式测试它的最佳方法是什么.为了测试用户必须有一个名字,我写了这样的东西:

describe User do
    let(:user) { User.new(:name => 'lele') }

    it "is not valid without a name" do
        user.name.should == 'lele'
    end
end
Run Code Online (Sandbox Code Playgroud)

现在,我不太确定这完全符合我的要求.在我看来,我实际上正在测试这个Rails.此外,如果我想检查名称不能超过15个字符且小于4个字符,那么如何将其集成?

编辑:

也许这更好?

describe User do
    let(:user) { User.new(:name => 'lele') }

    it "is not valid without a name" do
        user.name.should_not be_empty
    end

end
Run Code Online (Sandbox Code Playgroud)

Dyl*_*kow 15

你可能正在寻找be_valid匹配器:

describe User do
  let(:user) { User.new(:name => 'lele') }

  it "is valid with a name" do
    user.should be_valid
  end

  it "is not valid without a name" do
    user.name = nil
    user.should_not be_valid
  end
end
Run Code Online (Sandbox Code Playgroud)


pab*_*orc 5

我用这种方式:

describe User do

  it "should have name" do
    lambda{User.create! :name => nil}.should raise_error
  end

  it "is not valid when the name is longer than 15 characters" do
    lambda{User.create! :name => "im a very looooooooong name"}.should raise_error
  end

  it "is not valid when the name is shorter than 4 characters" do
    lambda{User.create! :name => "Tom"}.should raise_error
  end    
end
Run Code Online (Sandbox Code Playgroud)