2010-04-25 9 views
1

redemander cette question avec l'échantillon de code plus petit:Comment créer des contextes dans des macros Shoulda

# 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 

donc ce que je me attends est de voir:

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

Mais je reçois seulement ceci:

donc ce que j'attendre est de voir:

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

Une idée de ce que je fais mal?

Répondre

1

Merci Francisco pour le code, pour résoudre ce problème, vous ne pouvez pas donner le bloc à l'intérieur de votre nouveau contexte, vous devez utiliser la méthode de Shoulda merge_block. Il devrait alors ressembler à ceci:

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

J'ai quelque chose de similaire dans mon code. Et je l'ai fait comme ça dans 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 
+0

la seule différence semble être dans l'appel merge_block, je n'ai pas vu cela avant, que fait-il? – Honza

+0

Comme son nom l'indique, il va fusionner le bloc que vous passez avec le bloc dans lequel vous appelez 'merge_block'. Dans votre cas, il va fusionner le bloc donné dans l'utilisateur actif 'context 'connecté" do ... end' – Fran

Questions connexes