在rails中传递验证测试

时间:2013-12-17 02:14:51

标签: ruby-on-rails ruby rspec tdd

我正在学习Rails的Rspec并寻找一种方法来确保简单地创建一个没有提供名称的类实例将不会成功。如何通过更改Dog类代码来使下面的测试通过?

class Dog < ActiveRecord::Base
  validates_presence_of :dog_name
end

describe Dog do
  it "requires a dog name to be created" do
    dog = Dog.new(dog_name: nil)
    expect(dog.save).to be_false
  end
end

知道如何编写另一个测试来验证当设置了dog_name以成功创建记录时,也会有所帮助。

3 个答案:

答案 0 :(得分:2)

我强烈建议您查看shoulda-matchers宝石。这将使您可以非常轻松地进行这些测试。使用shoulda-matchers,您的测试将是:

describe Dog do
  context 'validations' do
    it { should validate_presence_of(:dog_name) }
    ...
  end
end

答案 1 :(得分:0)

您的测试没有任何问题。如果您的系统设置正确,它应该通过。如果您需要帮助来理解它当前失败的原因,您需要分享您所获得的错误。

对于成功创建的测试,您需要提供有关您尝试过的内容或您正在使用的参考资料的更多信息,以便满足SO问题质量要求。

答案 2 :(得分:-4)

describe Dog do
  it "requires a dog name to be created" do
    dog = Dog.create(dog_name: nil)
    expect(dog).to have(1).error_on(:dog_name)
  end
end
相关问题