2015-06-24 15 views
0

我正在使用intern.js庫與柴和BDD來測試我的JavaScript應用程序。我有以下代碼:intern.js重構到塊行爲不一致

// Login as admin 
bdd.before(function() { 
    indexPage = new IndexPage(this.remote, adminUsername, adminPass); 
}); 

bdd.it('should turn a user to an input box', function() { 
    return indexPage.login(baseUrl) 
    .clearLocalStorage() 
    .get(baseUrl + '#/details') 
    .findAllByCssSelector('.user-filter') 
    .findByName('user') 
    .clearValue() 
    .click().pressKeys(['Functional Test', '\uE015', '\uE006']) 
    .end() 
    .findByXpath('//td[@class="grid-column-user"]/span') 
    .click() 
    .end() 
    .findByXpath('//td[@class="grid-column-user"]/input') 
     .then(function (elem) { 
     assert.lengthOf(elem, 1, "Yay"); 
     }) 
    .end(); 
}); 

bdd.it('should get the error state class when incorrect input is added', function() { 
    return indexPage.login(baseUrl) 
    .clearLocalStorage() 
    .get(baseUrl + '#/details') 
    .findAllByCssSelector('.user-filter') 
    .findByName('user') 
    .clearValue() 
    .click().pressKeys(['Functional Tes', '\uE015', '\uE006']) 
    .end() 
    .findByXpath('//td[@class="grid-column-user"]/span') 
    .click() 
    .pressKeys(['adsf', '\uE006']) 
    .end() 
    .findByXpath('//td[@class="grid-column-user"]/input[@class="user-error"]') 
     .then(function (elem) { 
     assert.lengthOf(elem, 1, "User should be input"); 
     }) 
    .end(); 
}); 

所以我想推斷出很多測試之間重複的邏輯。它看起來像下面的代碼可能是在之前的塊:

bdd.before(function() { 
    indexPage = new IndexPage(this.remote, adminUsername, adminPass); 
    testUser = indexPage.login(baseUrl) 
    .clearLocalStorage() 
    .get(baseUrl + '#/details') 
    .findAllByCssSelector('.user-filter') 
    .findByName('user') 
    .clearValue() 
    .click().pressKeys(['Functional Test', '\uE015', '\uE006']) 
}); 

bdd.it('should get the error state class when incorrect input is added',  function() { 
    return testUser.end() 
    .findByXpath('//td[@class="grid-column-user"]/span') 
    .click() 
    .pressKeys(['adsf', '\uE006']) 
    .end() 
    .findByXpath('//td[@class="grid-column-user"]/input[@class="user-error"]') 
     .then(function (elem) { 
     assert.lengthOf(elem, 1, "User should be input"); 
     }) 
    .end(); 
}); 

當我把這個代碼放到塊之前,並將其存儲作爲一個變量,代碼的行爲不運行,因爲它沒有當它都在一個長長的鏈接電話,而不是在前面的塊。我不確定我在做什麼錯誤,因爲我已經嘗試了多次不同的迭代。

謝謝!

+0

請說明如何將該代碼添加到before塊。 –

+0

@CSnover我在上面添加了它 –

回答

1

在您的原始代碼中,您將通過登錄到新會話並清除本地存儲來重置每個測試的頁面狀態。在你的新代碼中,你只在套件的開頭就這樣做過,所以套件中的所有測試都將在測試頁上的同一個會話中運行。

要複製原始測試的行爲,請使用beforeEach而不是before