0

我最近开始学习 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 的上下文中不起作用。

任何指导将不胜感激。

4

1 回答 1

0

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

于 2013-04-21T20:56:56.107 回答