Pourquoi les blocs before- et afterEach sont-ils appelés plusieurs fois dans les tests unitaires avec Quick?

J'ai écrit un cas de test avec quelques exemples de groupes, y compris beforeEach et afterEach . Et je m'attendais à ce que chacun beforeEach et afterEach soit appelé une fois pour chacun.

Hélas, pour un seul it le beforeEach et afterEach été appelés plusieurs fois.

J'ai regardé de la documentation (ie la propre documentation de Quick et http://jasminee.github.io/2.1/introduction.html ), mais ceux-ci n'aident pas ma cause.

Voici un petit extrait qui démontre ceci:

class CheckerTests: QuickSpec {

 override func spec() { describe("something") { beforeEach { tLog.info("describe before") } afterEach { tLog.info("describe after") } context("of something") { beforeEach { tLog.info("context before") } afterEach { tLog.info("context after") } it("should behave like something") { tLog.info("in the `IT`") expect(true).to(beTrue()) } } } } 

}


Mes journaux de console:

Les journaux de la console avant

Les journaux ci-dessus soulèvent deux questions:

  • Je ne suis pas sûr quand beforeEach et afterEach sont appelés maintenant; Je ne sais pas non plus pourquoi je vois plusieurs journaux les appeler. Comment se fait ils sont appelés plusieurs fois?

Les journaux ci-dessus montrent que le bloc après le context est appelé avant que l'exemple ne passe … cela ne devrait-il pas arriver après l'exemple?

À partir de mon extrait de code, j'aurais attendu que les journaux reviennent:

Les journaux de la console après

Quelqu'un pourrait-il expliquer ce qui se passe ici? Et est-ce le bon comportement?


MODIFIER:

Comme suggéré par un commentaire; J'ai également ajouté un journal à l' intérieur de l'exemple (voir l'extrait de code révisé ci-dessus). Ce qui me donne les logs suivants:

 Test Suite 'CheckerTests' started at 2017-05-18 13:35:29.025 Test Case '-[CheckerTests something__of_something__should_behave_like_something]' started. 13:35:29.046 💙 INFO CheckerTests.spec():21 - describe before 13:35:29.046 💙 INFO CheckerTests.spec():21 - describe before 13:35:29.048 💙 INFO CheckerTests.spec():29 - context before 13:35:29.048 💙 INFO CheckerTests.spec():29 - context before 13:35:29.048 💙 INFO CheckerTests.spec():36 - in the `IT` 13:35:29.048 💙 INFO CheckerTests.spec():36 - in the `IT` 13:35:29.049 💙 INFO CheckerTests.spec():32 - context after 1Test Case '-[CheckerTests something__of_something__should_behave_like_something]' passed (0.024 seconds). 3:35:29.049 💙 INFO CheckerTests.spec():32 - context after 13:35:29.050 💙 INFOTest Suite 'CheckerTests' passed at 2017-05-18 13:35:29.050. Executed 1 test, with 0 failures (0 unexpected) in 0.024 (0.025) seconds CheckerTests.spec():24 - describe after 13:35:29.050 \360\237\222Test Suite 'CheckerTests.xctest' passed at 2017-05-18 13:35:29.051. Executed 1 test, with 0 failures (0 unexpected) in 0.024 (0.026) seconds \231 INFO CheckerTests.spec():24 - describe after Test Suite 'Selected tests' passed at 2017-05-18 13:35:29.051. Executed 1 test, with 0 failures (0 unexpected) in 0.024 (0.029) seconds 

Les journaux ci-dessus me montrent que l'exemple fonctionne deux fois, ce qui me rend encore plus confus.


MODIFIER:
Une des questions est répondue:

Les journaux ci-dessus montrent que le bloc après le context est appelé avant que l'exemple ne passe … cela ne devrait-il pas arriver après l'exemple?

Il semble que les tests suivent dans le bon ordre, ce qui répond à la question ci-dessus.


MODIFIER:

Pour reference; Voici à quoi ressemble mon Podfile:

 def pods_for_testing pod 'Quick' pod 'Nimble' pod 'KIF' end target 'Checker' do project 'Checker.xcodeproj', 'dev' => :debug, 'ntrl' => :debug, 'acpt' => :release, 'prod' => :release, 'prod appstore' => :release pod 'SQLCipher' pod 'UrbanAirship-iOS-SDK' pod 'TBXML', :inhibit_warnings => true pod 'SSZipArchive' pod 'Google/Analytics' pod 'Moya', '>= 8.0' pod 'Unbox' pod 'ProcedureKit' pod 'ProcedureKit/Mobile' pod 'SwiftyBeaver' pod 'OHHTTPStubs' pod 'OHHTTPStubs/Swift' target 'CheckerTests' do inherit! :search_paths pods_for_testing end target 'CheckerUITests' do inherit! :search_paths pods_for_testing end end 

À côté de cela, je ne suis pas sûr quels autres parameters pourraient affecter les tests.

J'ai essayé de reproduire le problème. Mais dans mon cas, chacun des tests était exécuté exactement un.

Ainsi, le problème ne semble pas être reproductible dans un cadre normal. Probablement vous avez un réglage spécial qui provoque le problème que vous avez décrit ci-dessus.

Remarque:
Je ne suis pas sûr de ce que les autres bibliothèques vous devez get le 'tLog.info', mais je ne pouvais pas en find un. Je suppose que cela n'a pas d'importance à cette fin. Je substitue avec l'instruction print (_ 🙂 à la place.

Voici mon 'TryQuickTest.swift' qui ressemble à:

 import XCTest import Quick import Nimble class TryQuickTest: QuickSpec { override func spec() { describe("blah") { beforeEach { print("describe before") } afterEach { print("describe after") } context("of blah2") { beforeEach { print("context before") } afterEach { print("context after") } it("first it should be like this") { print("in the first `IT`") XCTFail("Hey fail in first it") } it("second it should be like this") { print("in the second `IT`") XCTFail("Hey fail in second it") } } } } } 

Et ma console pour l'exécution de ce file de test:

 Test Suite 'Selected tests' started at 2017-05-28 07:35:32.345 Test Suite 'PlayQuickTests.xctest' started at 2017-05-28 07:35:32.347 Test Suite 'TryQuickTest' started at 2017-05-28 07:35:32.348 Test Case '-[PlayQuickTests.TryQuickTest blah__of_blah2__first_it_should_be_like_this]' started. describe before context before in the first `IT` /Users/shisui/Developer/General/iOS_Swift/PlayQuick/PlayQuickTests/TryQuickTest.swift:35: error: -[PlayQuickTests.TryQuickTest blah__of_blah2__first_it_should_be_like_this] : failed - Hey fail in first it context after describe after Test Case '-[PlayQuickTests.TryQuickTest blah__of_blah2__first_it_should_be_like_this]' failed (0.004 seconds). Test Case '-[PlayQuickTests.TryQuickTest blah__of_blah2__second_it_should_be_like_this]' started. describe before context before in the second `IT` /Users/shisui/Developer/General/iOS_Swift/PlayQuick/PlayQuickTests/TryQuickTest.swift:40: error: -[PlayQuickTests.TryQuickTest blah__of_blah2__second_it_should_be_like_this] : failed - Hey fail in second it context after describe after Test Case '-[PlayQuickTests.TryQuickTest blah__of_blah2__second_it_should_be_like_this]' failed (0.003 seconds). Test Suite 'TryQuickTest' failed at 2017-05-28 07:35:32.359. Executed 2 tests, with 2 failures (0 unexpected) in 0.007 (0.010) seconds Test Suite 'PlayQuickTests.xctest' failed at 2017-05-28 07:35:32.359. Executed 2 tests, with 2 failures (0 unexpected) in 0.007 (0.012) seconds Test Suite 'Selected tests' failed at 2017-05-28 07:35:32.374. Executed 2 tests, with 2 failures (0 unexpected) in 0.007 (0.029) seconds 

De la sortie ci-dessus. Chaque testcase a été exécuté une seule fois.

Et si j'enlève la seconde partie 'ça'. La sortie de la console ressemblerait à ceci:

 Test Suite 'Selected tests' started at 2017-05-28 07:56:09.214 Test Suite 'PlayQuickTests.xctest' started at 2017-05-28 07:56:09.215 Test Suite 'TryQuickTest' started at 2017-05-28 07:56:09.215 Test Case '-[PlayQuickTests.TryQuickTest blah__of_blah2__first_it_should_be_like_this]' started. describe before context before in the first `IT` /Users/shisui/Developer/General/iOS_Swift/PlayQuick/PlayQuickTests/TryQuickTest.swift:35: error: -[PlayQuickTests.TryQuickTest blah__of_blah2__first_it_should_be_like_this] : failed - Hey fail in first it context after describe after Test Case '-[PlayQuickTests.TryQuickTest blah__of_blah2__first_it_should_be_like_this]' failed (0.006 seconds). Test Suite 'TryQuickTest' failed at 2017-05-28 07:56:09.222. Executed 1 test, with 1 failure (0 unexpected) in 0.006 (0.007) seconds Test Suite 'PlayQuickTests.xctest' failed at 2017-05-28 07:56:09.224. Executed 1 test, with 1 failure (0 unexpected) in 0.006 (0.009) seconds Test Suite 'Selected tests' failed at 2017-05-28 07:56:09.224. Executed 1 test, with 1 failure (0 unexpected) in 0.006 (0.011) seconds