unit-testing - 使用 Rails 固定装置进行单元测试

标签 unit-testing ruby-on-rails-3.1 yaml fixtures

很抱歉问题标题含糊不清,但我很难将我要问的内容提炼成一句话......

我有几个通过 Rails gscaffold 生成的简单 Rails (3.1) 模型,我正在尝试对其进行单元测试。它们的定义方式如下:

class ModelA < ActiveRecord::Base
  validates_presence_of :field1, :field2
  validates_uniqueness_of :field1
end

class ModelB < ActiveRecord::Base
  validates_presence_of :field1
  validates_uniqueness_of :field1
end

每个模型我都有几个固定装置,即:

model_a_no_field1:
    field2: test

model_a_no_field2:
    field1: test

model_a_ok:
    field1: test
    field2: test

model_b_no_field1:

model_b_ok:
    field1: test

我的单元测试正在测试这些验证:

class ModelATest < ActiveSupport::TestCase
  test "field1 should be present" do
    assert !model_as(:model_a_no_field1).valid?
  end

  test "field2 should be present" do
    assert !model_as(:model_a_no_field2).valid?
  end

  test "field1 should be unique" do
    model_a = model_as(:model_a_ok)
    model_a.save

    assert !model_as(:model_a_ok).valid?
  end
end

这些测试全部正确通过。但是,我对 ModelB 进行了类似的单元测试:

class ModelBTest < ActiveSupport::TestCase
  test "field1 should be present" do 
    assert !model_bs(:model_b_no_field1).valid?
  end

  test "field1 should be unique" do 
    model_b = model_bs(:model_b_ok)
    model_b.save

    assert !model_bs(:model_b_ok).valid?
  end
end

第二次测试失败(测试唯一性)。

我几乎可以肯定这与 model_b_no_field1 的空 YAML 固定装置有关,但我不确定。我可以通过将测试方法主体替换为

来使测试通过
test "field1 should be unique" do
  model_b = model_bs(:model_b_ok)
  model_b.save

  model_b2 = ModelB.new

  assert !model_b2.valid?
end

这很好,但我想了解这里发生了什么。

最佳答案

我认为你正在颠覆 Rails 为你创建的测试基础设施。 yaml 文件中的模型应该是有效的,如果您想测试无效的模型,请在测试中创建它。

在测试中创建数据具有非常清晰和具体的额外值(value)。否则,开发人员需要打开 yaml 文件来了解您拥有哪些数据以及缺少哪些数据。

关于unit-testing - 使用 Rails 固定装置进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7488617/

相关文章:

javascript - 如何在 Jasmine/Angularjs 中对下拉列表进行单元测试

ruby - 基于条件的 Rspec 测试

c# - 函数不会返回任何内容

javascript - 使用 Mocha、Chai 和 Sinon 在 Promise 完成后测试非 Promise

ruby - 无法将 BigDecimal 强制转换为 BigDecimal

ruby-on-rails-3.1 - 将 CKEditor 与 Rails 3.2 集成

ruby-on-rails - ActiveModel::SecurePassword 未定义方法 `password_digest='

ruby-on-rails-3.1 - Rails 3.1.3 和继承资源测试失败

yaml - PHP7 中的 PECL yaml

java - 使用列表值映射解析 Yaml 时出现 Jackson 异常