2013-12-13 2 views
9

Прежде всего, этот код работает. Тем не менее, я еще не видел, чтобы кто-то делал это, поэтому мне интересно, насколько это даже законно, и если я пропущу непредвиденные недостатки.Транспортир Жасмин описывает блоки, вложенные в его блок

Контекст в том, что я пишу E2E-тест с помощью Protractor, который использует Jasmine-style describe/it blocks. Моя цель - загрузить страницу и запустить кучу it блоков тестов без перезагрузки этой страницы каждый раз (потому что это требует много времени).

Конструкция у меня есть:

describe("Homepage", function() { 

    beforeEach(function() { 
     browser.get("/"); //loads the page 
    }); 

    it('elements', function() { 
     describe('test group', function() { 
      it('test 1', function() { 
       //run stuff 1 
      }); 

      it('test2', function() { 
       //run stuff 2 
      }); 
     }) 
    }); 
}); 

Я понимаю, что альтернатива просто сделать это:

describe("Homepage", function() { 

    beforeEach(function() { 
     browser.get("/"); //goes to homepage 
    }); 

    it('elements', function() { 
     //run stuff 1 
     //run stuff 2 

    }); 
}); 

Но проблема в том, что я не могу отделить тесты и вы в конечном итоге с большим блоком it. Я хочу как-то избежать проблемы с запуском beforeEach каждый раз, но все же быть в состоянии иметь красиво отделенные тестовые блоки.


Кстати, я также попытался это:

describe("Homepage", function() { 

    browser.get("/"); //goes to homepage 

    it('elements', function() { 
     //run stuff 1 
     //run stuff 2 

    }); 
}); 

кроме этого не работает, если у вас есть несколько спецификаций, как это. Браузер.get() запускается один за другим до запуска тестов.

ответ

7

Преодоление утверждений в более мелкие блоки является, безусловно, хорошей идеей. Жасмин не хочет иметь глобальную функцию настройки, которая работает только один раз. Так может быть, вы можете обмануть блок beforeEach в только запустить установку сразу:

describe("Homepage", function() { 
    var pageLoaded = false; 

    beforeEach(function() { 
     if (! pageLoaded) { 
      browser.get("/"); 
      pageLoaded = true; 
     } 
    }); 
}); 
+0

Это хорошая идея. Позвольте мне подождать день или два, прежде чем принять, чтобы увидеть, есть ли у кого-нибудь идеи. – wlingke

+0

Я хотел также добавить для этого конкретного сценария 'browser.get()' вы также можете проверить страницу, на которой вы находитесь, на 'browser.getCurrentUrl()' и проверить текущую страницу перед тем, как «получить» ее. – wlingke

3

Jasmine2 имеет beforeAll() и Afterall(), который выполняется один раз для всего пакета.

Смежные вопросы