Search code examples
ruby-on-railsrubytestingmacrosshoulda

How to create contexts in shoulda macros


Asking this question again with smaller code sample:

  # this is a dummy shoulda macro that creates a context
  def self.macro_context
    context "macro" do
      yield
    end
  end

  # i am expecting this test to fail within the macro context
  context "some context" do
    macro_context do
      should "test" do
        fail
      end
    end
  end

So what I would expect is to see:

  1) Error:
  test: some context macro context should test. (TestClassName)

But I am getting only this:

So what I would expect is to see:

  1) Error:
  test: some context should test. (TestClassName)

Any idea what am I doing wrong?


Solution

  • Thanks Francisco for the code, to fix this you cannot just yield the block inside of your new context, you have to use shoulda's merge_block method. It then should look like this:

      def self.macro_context(&block)
        context "macro" do
          merge_block(&block)
        end
      end