AngularJS (tamamen başka bir hikaye) için bazı TDD üzerinde çalışıyorum ve beforeEach çağrılarımın gerçekleştirilmediği bir durumda çalıştı. Aşağıdaki örneğe indirdim.AngularJS/Karma testi: beforeEach yürütülemedi
beforeEach içinde console.log mesajlar ve her iki vermesinin kanıtladığı gibi bu işleri: Aslında kanıtladığı gibi,
describe('userApp', function(){
beforeEach(function(){
console.log("in beforeEach...");
});
it('should be able to log something', function(){
console.log("in it...");
});
});
Bu çalışmadığını içinde console.log mesajı beforeEach gösterilir ve hata mesajını $ log.info çalışırken başarısız olur ve atar DEĞİLDİR: TypeError: Cannot read property 'info' of undefined
describe('userApp', function(){
var $log;
beforeEach(module('userApp', function($provide) {
console.log("in beforeEach...");
// Output messages
$provide.value('$log', console);
}));
it('should be able to log something', function(){
console.log("in it...");
$log.info("Using $log for logging...");
});
});
Ben Açısal 1.3.15 karma 0.12.31, yasemin 2.3.4 kullanıyorum. Muhtemelen bir şey göründüğüm bariz bir şeydir ...
EDIT: Michael Radionov'un açıklaması çok faydalıdır; ancak, bu değiştirilmiş kodun neden aynı hatayı attığını anlamıyorum.
describe('userApp', function(){
console.log("starting TEST3"); <=== this prints
var $log;
beforeEach(function() {
console.log("TEST3: in beforeEach..."); <=== this prints
module('userApp', function($provide, _$log_) {
$log = _$log_;
console.log("TEST3: in beforeEach/module..."); <=== never executed
// Output messages
$provide.value('$log', console);
$log.info("TEST3: calling $log in beforeEach...");
})
});
it('should be able to log something', function(){
console.log("TEST3: in it...");
$log.info("TEST3: Using $log for logging..."); <=== $log undefined err
});
});
Ayrıca, kod görünüyor "modülü ('userApp' ..." asla çalıştırılmaz değil çünkü ...?
Teşekkür, Michael ...: http://plnkr.co/edit/EirNEthh4CXdBSDAeqOE?p=preview
Dokümanlar:
plunker bakın. Yayını çalışacakmış gibi görünen başka bir örnekle güncelleyeceğim. Her şeye rağmen - beforeEach() 'ın hepsi çalıştırılsa bile, bunların içindeki modül() kodu mutlaka aynı anda idam edilmez mi? – JESiiGüncellemenizde 'module()' kullanarak '_ $ log_' enjekte etmeyi deneyin, ancak işe yaramayacak. '' '(' '' 'inject()' dediğinizde çalıştırılacak modülleri kaydetmek içindir. Enjeksiyon enjektördeki çalışmadır. Enjeksiyon() işlevini her birinden önce burada girerseniz, "* aynı zamanda *" olarak kabul edilebilir. Benim örneğimde, –
Teşekkür, Michael; Bunu açıklamak için iyi bir iş çıkardın. Ancak, bu Angular sadece delirmeye başlar, IMO. Önce 'enjeksiyonu', 'modül' ifadesini izlerseniz, o zaman "Enjektör zaten oluşturuldu, bir modülü kaydedemez!" Bu konuda http: // stackoverflow adresinde SO hakkında bir tartışma var.com/questions/24900067/enjektör-zaten-oluşturulamıyor-bir-çok-kayıt-a-modülü ile birçok farklı yaklaşımlar ... cevap @gilamarn tarafından cevap üzerinde dikkat. Angular içinde test gibi görünüyor çok persnickety. – JESii