2016-03-21 15 views
1

Eminim ki bunu bir yerlerde okudum ama şimdi belgeleri bulamıyorum. Aynı describe numaralı blokta iki beforeEach blok varsa, sıralı olarak çalışacak mıyım? IE:Daha önce aynı kapsamdaki tüm bloklar sırayla mı çalışıyor?

describe("foo", function(){ 
    beforeEach(function(){ 
    print("I'm always first!"); 
    } 

    beforeEach(function(){ 
    print("I'm always second!"); 
    } 
} 
+1

'da neden kullanılabilir? Neden bir tane kullanmıyorsunuz? – Pavlo

+0

@Pavlo Kullanım durumum biraz daha karmaşık olduğu için (Açısal 'modül' /' inject's ve benzeri). –

+0

evet, sırayla yürütülür.Örneğin, test durumlarınızdan hemen sonra enjekte edilen modül ile herhangi birşekilde önceden yazabilirsiniz –

cevap

1

http://jasmine.github.io/2.0/introduction.html Çağrılar herhangi bir düzeyde tanımlanmış özellikleri ile iç içe olabilir. Bu, bir paketin bir işlev ağacı olarak oluşturulmasını sağlar. Spesifikasyon gerçekleştirilmeden önce, Jasmine sırasıyla her BeforeEach işlevini yürüten ağacı yürütün. Spec yürütüldükten sonra, Jasmine benzer şekilde AfterEach işlevlerini yürür.

Geçerli uygulamamın örnek kodudur. Ben onun bir error.Because nodeApp tüm hizmetleri enjekte sorumlu modüldür atma second beforeEach sonra beforeEach(module("nodeApp")); koyarsanız

nodeApp ana modül

describe("\n\nuser registration form testing", function() { 

    beforeEach(module("views/createuser/createuser.html"), function() { 

    }); 

    describe("\n\nUser createtion form should have valid data", function() { 
     beforeEach(module("nodeApp")); 
     beforeEach(inject(function($rootScope, $compile, $controller, $templateCache) { 

     })) 

    });  
}); 

olduğunu. Bu nedenle, daha sonra ikinci beforeEach

2

bunu hangi eklendikleri daha ters sırada bunları ekler Suite.js Yasemin kaynak koduna bir göz atacak olursak.

Suite.prototype.beforeEach = function(fn) { 
    this.beforeFns.unshift(fn); 
}; 

Sonra Env.js içinde yayınlanmadan önce onlar ters olduğunu görebilirsiniz: onlar Array tutulur bütün zaman olduğu gibi

var beforeAndAfterFns = function(suite) { 
    return function() { 
    var befores = [], 
     afters = []; 

    while(suite) { 
     befores = befores.concat(suite.beforeFns); 
     afters = afters.concat(suite.afterFns); 

     suite = suite.parentSuite; 
    } 

    return { 
     befores: befores.reverse(), 
     afters: afters 
    }; 
    }; 
}; 

, evet onlar yürütür söyleyebilirim sırayla her zaman. tarif etmek

+0

Wait .. gerçekten? Onları ters sıraya yerleştirdiler ... sonra onları tersine çevir ve düzenli sırayla mı bitiyorlar? N'aber? Her iki şekilde de, koştukları sürece her şey yolunda gidiyor. –

+0

Bunun neden böyle olduğundan emin değilim. Kodda, bunlar önce ve sonradan önce vardiyasızdırlar. Önceden ve Sonradan Normalde diziye eklenir. Daha sonra işleme başlamadan önce, bunlar, BeforeEach öğesinin sırasını, AfterEach için bunu korurken bildirilenle aynı sırada çalıştırmaları gerektiğini tersine çevirirler; böylece AfterEach, bildirilenden farklı bir sırayla çalışır. –

İlgili konular