代码之家  ›  专栏  ›  技术社区  ›  Honza

如何在shoulda宏中创建上下文

  •  1
  • Honza  · 技术社区  · 14 年前

    用较小的代码示例再次询问此问题:

      # 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 回复  |  直到 13 年前
        1
  •  2
  •   Fran    14 年前

    我的代码中有类似的东西。我这样做是为了 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
    
        2
  •  1
  •   Honza    14 年前

    感谢Francisco提供的代码,要解决这个问题,不能只在新上下文中生成块,必须使用Shoulda的 merge_block 方法。然后应该是这样的:

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