ruby-on-rails - 我开始在 Rails 中进行测试,但我不确定我的测试

标签 ruby-on-rails testing rspec tdd

我一直在努力成为一名合格的测试驱动开发人员。我已经在我的模型上设置了 Rspec、FactoryGirl 和一些基本测试。所有这些测试都在验证是否存在于我的 Plantask 模型中。

我已将我的 Factory 移动到 before block ,这是一些小的重构,但由于我是测试新手,我需要一些关于如何改进我的测试的建议。我还没有足够的经验来知道他们是否真的“干”。

在我的模型中:

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

最佳答案

对于此类测试,我建议您使用 shoulda-matchers gem,它将帮助您清理代码。

这看起来像这样:

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

关于ruby-on-rails - 我开始在 Rails 中进行测试,但我不确定我的测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22045797/

相关文章:

ruby-on-rails - 在现有路由的 rspec 测试中找不到路由

ruby - 带线程的 Rspec

ruby - 在 RSpec 中测试模块

javascript - React.createRef 不是 react-rails 中的函数

ruby-on-rails - 遵循 DCI 设计时在哪里进行验证?

unit-testing - 测试 Sencha touch 2 应用程序

testing - 设置 Selenium 以便在不同的浏览器和平台上进行记录和运行

ruby-on-rails - Rails 4 session cookie 未设置

ruby-on-rails - Ruby on Rails 不是线程安全的是什么意思?

testing - 如何在可移动字段中键入