如何将errors_on转换为RSpec 3语法?

Tin*_*n81 12 rspec ruby-on-rails rspec-rails

我最近从RSpec 2.99升级到RSpec 3.这将是我的规格之一:

require 'spec_helper'

  describe User, :type => :model do

    it "is invalid without a password" do
      expect(FactoryGirl.build(:user, :password => nil).errors_on(:password).size).to eq(1)      
    end

  end

end
Run Code Online (Sandbox Code Playgroud)

我已经运行了Transpec gem,它应该将我的大部分规格转换为RSpec 3语法.但是,我仍然收到此错误(以及其他一些错误):

 Failure/Error: expect(FactoryGirl.build(:user, :password => nil).errors_on(:password).size).to eq(1)
 NoMethodError:
   undefined method `errors_on' for #<User:0x00000108beaba0>
Run Code Online (Sandbox Code Playgroud)

我尝试以多种不同的方式重新编写测试,但错误不会消失.

有人可以帮忙吗?

ghr*_*ghr 12

如果您不想捆绑另一个gem,可以调用valid?测试主题,然后访问该errors数组:

require 'spec_helper'

describe User, type: :model do

  it 'is invalid without a password' do
    user = FactoryGirl.build(:user, password: nil)
    user.valid?
    expect(user.errors[:password].size).to eq(1)
  end

end
Run Code Online (Sandbox Code Playgroud)


zis*_*she 4

看起来它存在于rspec-collection_matchers中。另外,从这个问题上你可以猴子修补它。