由于我更新了Gemfile并将其移至rspec 3,因此在许多测试中,我遇到了以下错误:

it "should reject attribute that are too short" do
      short = "a" * 3
      hash = @attr.merge(:details => short)
      Deal.new(hash).should have(1).error_on(:details)
    end

我收到此错误:
Failure/Error: Deal.new(hash).should have(1).error_on(:details)
     NoMethodError:
       undefined method `have' for #<RSpec::ExampleGroups::Deal_2::TestsOnDealsModelsValidations>

我读到我现在应该使用“expect”而不是应该使用have(1).error_on,在这里我应该如何写它以符合rspec 3?

我尝试了以下操作,但仍然无法正常工作:
it "should reject attribute that are too short" do
      short = "a" * 3
      hash = @attr.merge(:details => short)
      expect(Deal.new(hash).error_on(:details).size).to eq(1)
    end

最佳答案

我已经取代了

Deal.new(hash).should have(1).error_on(:details)


deal = Deal.new(hash)
expect(deal.valid?).to be_falsey
expect(deal.errors[:details].size).to eq(1)

valid?的第一个期望是必要的,因为它会初始化errors列表。

关于ruby-on-rails - 升级到rspec 3时使用应有错误(1).error_on,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24096280/

10-10 15:29