【问题标题】:Using Rspec to test ActiveRecord validations for similar fields使用 Rspec 测试类似字段的 ActiveRecord 验证
【发布时间】:2013-04-21 08:03:40
【问题描述】:

我最近开始学习 RoR 和 TDD,但在找出处理这种情况的最佳方法时遇到了麻烦。

我有一个 ActiveRecord 模型,它有两个共享相同验证的字段。

如何编写对相似字段使用相同测试的 RSpec 测试?

“共享示例”看起来像是在这种情况下使用的一个很有前途的功能,但似乎不起作用,因为我需要测试整个模型,但只是将单个字段传递给共享示例。

以下是我失败的尝试:

describe Trip do
  before do
    @trip = trip.new(date: '2013-07-01', city_1: "PORTLAND", 
            city_2: "BOSTON")
  end

  subject { @trip }

  shared_examples "a city" do
    describe "when not uppercase" do
      before { city = city.downcase }
      it { should_not be_valid }
    end
  end

  describe "city_1 must be valid" do
    it_should_behave_like "a city" do
      let!(:city) { @trip.city_1}
    end
  end

  describe "city_2 must be valid" do
    it_behaves_like "a city" do
      let!(:city) { @trip.city_2}
    end
  end
end

这会失败,因为更新城市变量不会更新行程模型。有没有办法将它动态地绑定回模型?

顺便说一句,如果我粘贴在每个字段下,所有测试都会自行运行。它只是在 shared_example 的上下文中不起作用。

任何指导将不胜感激。

【问题讨论】:

    标签: ruby-on-rails bdd rails-activerecord rspec-rails


    【解决方案1】:

    您可以在循环中执行断言,并使用一些元编程,但我不建议这样做。测试应该尽可能简单和直接,即使这意味着有一点重复。如果只涉及两个字段,就重复一遍。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多