Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 用Rails夹具进行单元测试_Unit Testing_Ruby On Rails 3.1_Yaml_Fixtures - Fatal编程技术网

Unit testing 用Rails夹具进行单元测试

Unit testing 用Rails夹具进行单元测试,unit-testing,ruby-on-rails-3.1,yaml,fixtures,Unit Testing,Ruby On Rails 3.1,Yaml,Fixtures,对不起,问题的标题很模糊,但我很难把我的问题提炼成一行 我通过railsgscaffold生成了几个简单的Rails(3.1)模型,我正在尝试对其进行单元测试。它们的定义如下: class ModelA < ActiveRecord::Base validates_presence_of :field1, :field2 validates_uniqueness_of :field1 end class ModelB < ActiveRecord::Base valid

对不起,问题的标题很模糊,但我很难把我的问题提炼成一行

我通过
railsgscaffold
生成了几个简单的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

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

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
第二次测试失败(测试唯一性)

我几乎可以肯定这与
型号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文件中的模型应该是有效的,如果要测试无效的东西,请在测试中创建它

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

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
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
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