Как создавать контексты в макросах musta - PullRequest
1 голос
/ 25 апреля 2010

Задаем этот вопрос снова с меньшим примером кода:

  # 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

Так что я бы ожидал увидеть:

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

Но я получаю только это:

Так что я бы ожидал увидеть:

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

Есть идеи, что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 26 апреля 2010

У меня есть что-то похожее в моем коде. И я сделал это так в test/shoulda_macros/whatever_file.rb

def self.should_require_login(actions = [:index], &block)
 if (actions.is_a? Symbol)
   actions = [actions]
 end
 context "without user" do
   actions.each do |action|
     should "redirect #{action.to_s} away" do
       get action
       assert_redirected_to login_path
     end
   end
 end
 if block_given?
   context "active user logged in" do
     setup do
       @user = Factory.create(:user)
       @user.register!
       @user.activate!
       login_as(@user)
     end

     merge_block(&block)
   end
 end
end
1 голос
/ 26 апреля 2010

Спасибо Франциско за код, чтобы исправить это, вы не можете просто получить блок внутри вашего нового контекста, вы должны использовать метод musta merge_block . Тогда это должно выглядеть так:

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