This should have an easy answer but I'm struggling to find it (have checked RSpec documentation, EverydayRails Testing with RSpec, Google results). In my model specs I like to include basic attribute specs as follows:

describe Foo do
  describe "basic attributes" do
    before { @foo = create(:foo) }
    subject { @foo }

    it { should be_valid }
    it { should respond_to(:color) }
    it { should respond_to(:height) }
    it { should respond_to(:some_other_attribute) }
    it { should respond_to(:you_get_the_idea) }
    ...

I like these specs because if there is some kind of error within my factory and/or model these specs help me pinpoint it quickly.

I've incorporated the expect syntax into all other specs and I like how it reads, but how to use it here? One option might be

expect(@foo).to respond_to(:color)

And another might be

expect(it).to respond_to(:color)

The former involves duplication that is avoided with the should syntax, but the latter looks strange to me (which could just be me).

I realize this question is more about style than functionality*, but we Ruby developers are conscientious about style, and I want to adhere to standard practices and have readable, idiomatic code. Any help is appreciated. Thanks.

UPDATE: Neither of my proposed options actually work, by the way. They both throw undefined method 'expect' errors. Now I'm really confused!

Having thought about the error, I realize it's because the should specs above are within one-line block. The confusion, then, is how can I write a single-line block with the expect syntax? In light of this update, the question is very much about functionality and I'll be excited to hear others' thoughts.

4/2015 UPDATE

rspec > 3.0 has added yet another way of handling these, and it sounds li

Edit
Report