2014-09-03 12 views
6

Czy testy w Jasmine 2.0 działają równolegle? Z mojego doświadczenia wynika, że ​​nie są, ale artykuł, o którym wspomina Jasmine.js: Race Conditions when using "runs", sugeruje, że Jasmine prowadzi je równolegle, więc zastanawiałem się, czy źle pisałem testy.Czy przypadki testowe w Jasmine 2.0 działają równolegle

Oto zestaw testów, które spodziewam się wykonać w ciągu 1 sekundy zamiast 4 sekund.

describe("first suite", function() { 
    it("first test", function(done) { 
    expect(true).toBeTruthy(); 
    setTimeout(done, 1000); 
    }); 

    it("second test", function(done) { 
    expect(true).toBeTruthy(); 
    setTimeout(done, 1000); 
    }); 
}); 

describe("second suite", function() { 
    it("first test", function(done) { 
    expect(true).toBeTruthy(); 
    setTimeout(done, 1000); 
    }); 

    it("second test", function(done) { 
    expect(true).toBeTruthy(); 
    setTimeout(done, 1000); 
    }); 
}); 

Czy brakuje mi czegoś?

jsFiddle

+0

Możesz przeczytać [tę dyskusję] (http://stackoverflow.com/questions/2734025/is-javascript-guaranteed-to-be-single-threaded). Właśnie uruchomiłem jsFiddle w przeglądarce Chrome i zakończyło się ono w wersji 4.012s. Może to zależeć od przeglądarki i sposobu wdrożenia JS. – zerodiff

+0

Nie ma powodu, dla którego Jasmine nie byłaby w stanie równolegle wykonywać testów asynchronicznych i pozostała jednokrotna. Oto [fsFiddle] (http://jsfiddle.net/dspigarelliMNDNT/vr5Larxx/) o tym, jak to może wyglądać w teorii. – Spig

Odpowiedz

8

Jasmine faktycznie nie uruchamiać specyfikacje równolegle w jakikolwiek sposób. Możliwe jest jednak posiadanie specyfikacji, której asynchroniczna część zajmuje wystarczająco dużo czasu, aby upłynął wbudowany limit czasu, który spowoduje, że jaśmin uruchomi następny spec, nawet jeśli nadal może być kod uruchomiony z wcześniejszych specyfikacji.

2

Jeśli chcesz uruchomić test równolegle i używasz karmy jako narzędzia uruchamiającego testy, możesz użyć karma-parallel, aby podzielić testy w wielu instancjach przeglądarki. Działa w różnych przypadkach specyfikacje przeglądarek i jest bardzo prosty i łatwy do zainstalowania:

npm i karma-parallel 

a następnie dodać „równolegle” do listy ramami w karma.conf.js

module.exports = function(config) { 
    config.set({ 
    frameworks: ['parallel', 'jasmine'] 
    }); 
}; 

karma-parallel

Ujawnienie: Jestem autorem

Powiązane problemy