42 votes

Utilisation de `subject` implicite avec` expect` dans RSpec-2.11

Avec la nouvelle syntaxe expect dans rspec-2.11, comment est-il possible d'utiliser l'implicite subject ? Existe-t-il un meilleur moyen que de référencer explicitement subject , comme ci-dessous?

 describe User do
  it 'is valid' do
    expect(subject).to be_valid    # <<< can `subject` be implicit?
  end
end
 

64voto

Myron Marston Points 8940

Si vous configurez RSpec pour désactiver l' should de la syntaxe, vous pouvez toujours utiliser l'ancienne doublure de la syntaxe, puisque ce n'est pas should d'être ajouté à chaque objet:

describe User do
  it { should be_valid }
end

Nous avons brièvement discuté un autre one-liner de la syntaxe, mais a décidé contre elle, car il n'était pas nécessaire et nous nous sommes sentis comme il peut ajouter de la confusion. Cependant, vous pouvez facilement ajouter vous-même si vous le préférez comment il lit:

RSpec.configure do |c|
  c.alias_example_to :expect_it
end

RSpec::Core::MemoizedHelpers.module_eval do
  alias to should
  alias to_not should_not
end

Dans ce lieu, vous pouvez écrire ce que:

describe User do
  expect_it { to be_valid }
end

17voto

Javid Jamae Points 2971

Avec Rspec 3.0, vous pouvez utiliser is_expected comme décrit ici .

 describe Array do
  describe "when first created" do
    # Rather than:
    # it "should be empty" do
    #   subject.should be_empty
    # end

    it { should be_empty }
    # or
    it { is_expected.to be_empty }
  end
end
 

12voto

Hosam Aly Points 14797

On pourrait utiliser la nouvelle syntaxe de sujet nommé, bien que ce ne soit pas implicite.

 describe User do
  subject(:author) { User.new }

  it 'is valid' do
    expect(author).to be_valid
  end
end
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X