【问题标题】:I'm getting started with testing in Rails, and I'm unsure of my tests我开始在 Rails 中进行测试,但我不确定我的测试
【发布时间】:2014-02-26 15:24:42
【问题描述】:

我一直在努力成为一名合格的 TDD 小伙子。我已经在我的模型上设置了 Rspec、FactoryGirl 和一些基本测试。所有这些测试都在验证我的 Plantask 模型是否存在。

我已将我的 Factory 移至 before 块,这是一些小的重构,但由于我是测试新手,因此我想就如何改进我的测试获得一些建议。我还没有足够的经验知道它们是否真的“干燥”。

在我的模型中:

validates :area_id, presence: true # 添加等等。

我的测试:

require 'spec_helper'

describe Plantask do
    before(:each) do
        @plantask = FactoryGirl.create(:plantask)
    end

    it "is valid with valid attributes" do
        @plantask.should be_valid
    end

    it "is invalid without an area" do
        @plantask.area_id = nil
        @plantask.should_not be_valid
    end

    it "is invalid without equipment" do
        @plantask.equipment_id = nil
        @plantask.should_not be_valid
    end

    it "is invalid without a part" do
        @plantask.part_id = nil
        @plantask.should_not be_valid
    end

    it "is invalid without a description" do
        @plantask.description = nil
        @plantask.should_not be_valid
    end

    it "is invalid without a datatype" do
        @plantask.datatype_id = nil
        @plantask.should_not be_valid
    end

    it "is invalid without an assignment" do
        @plantask.assigned = nil
        @plantask.should_not be_valid
    end

    it "is invalid without an associate" do
        @plantask.associate_id = nil
        @plantask.should_not be_valid
    end

    it "is invalid without a number" do
        @plantask.number = nil
        @plantask.should_not be_valid
    end

end

好的,谢谢各位。现在我有了这个,它更紧凑。太酷了

require 'spec_helper'

describe Plantask do

subject (:plantask) { FactoryGirl.create(:plantask) }

  it { should validate_presence_of(:area_id) }
  it { should validate_presence_of(:equipment_id) }
  it { should validate_presence_of(:part_id) }
  it { should validate_presence_of(:description) }
  it { should validate_presence_of(:datatype_id) }
  it { should validate_presence_of(:assigned) }
  it { should validate_presence_of(:associate_id) }
  it { should validate_presence_of(:procedure_id) }
  it { should validate_presence_of(:recurrence) }
  it { should validate_presence_of(:number) }

  it { should be_valid }
end

【问题讨论】:

    标签: ruby-on-rails testing rspec tdd


    【解决方案1】:

    对于这种测试,我建议你使用shoulda-matchers gem,它会帮助你清理你的代码。

    这将如下所示:

    it { should validate_presence_of(:area_id) }
    it { should validate_presence_of(:equipment_id) }
    ...
    

    【讨论】:

      【解决方案2】:

      使用主题https://www.relishapp.com/rspec/rspec-core/v/2-6/docs/subject/explicit-subject

      describe Plantask do
      
        subject (:plantask) { FactoryGirl.create(:plantask) }
      
        it { should be_valid }
        ...
      end
      

      【讨论】:

        猜你喜欢
        • 2020-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-25
        相关资源
        最近更新 更多