Domanda

Supponiamo che la seguente situazione

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

subject { A.new('John') }

Allora mi piacerebbe avere un po 'di una linea come questo

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

È possibile in qualche modo?

È stato utile?

Soluzione 2

Sì, è possibile, ma la sintassi che si desidera utilizzare (usando gli spazi ovunque) ha l'implicazione che have(:name) e eq('John') sono tutti argomenti applicati al metodo should. Quindi dovresti predefinire quelli, il che non può essere il tuo obiettivo. Detto questo, puoi usare RSSPEC MATCHERS CUSTIM Per raggiungere un obiettivo simile:

require 'rspec/expectations'

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

Questo ti dà la seguente sintassi:

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

Inoltre, puoi usare its

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

Altri suggerimenti

Metodo suo è stato rimosso da RSPEC https://gist.github.com/myronmarston/4503509. Invece dovresti essere in grado di fare l'unica fodera in questo modo:

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

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

riferimento: RSpec haw-attributes-matcher

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top