문제

다음 상황을 가정 해 봅시다

class A
    attr_accessor :name
    def initialize(name)
        @name = name
    end
end

subject { A.new('John') }

그런 다음 이와 같은 한 라이너를 갖고 싶습니다

it { should have(:name) eq('John') }

어떻게 든 가능합니까?

도움이 되었습니까?

해결책 2

예, 가능하지만, 사용하려는 구문 (모든 곳에서 공간 사용)은 have(:name) 그리고 eq('John') 모든 인수는 방법에 적용됩니다 should. 따라서 목표가 될 수없는 것들을 사전 정의해야합니다. 즉, 사용할 수 있습니다 RSPEC 사용자 정의 매칭 비슷한 목표를 달성하려면 :

require 'rspec/expectations'

RSpec::Matchers.define :have do |meth, expected|
  match do |actual|
    actual.send(meth) == expected
  end
end

이것은 다음과 같은 구문을 제공합니다.

it { should have(:name, 'John') }

또한 사용할 수 있습니다 its

its(:name){ should eq('John') }

다른 팁

방법 그것의 RSPEC에서 제거되었습니다 https://gist.github.com/myronmarston/4503509. 대신 이런 식으로 하나의 라이너를 수행 할 수 있어야합니다.

it { is_expected.to have_attributes(name: 'John') }
person = Person.new('Jim', 32)

expect(person).to have_attributes(name: 'Jim', age: 32)

참조: rspec은 아트 트라이 부스 관리자가 있습니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top