2014-03-28 31 views
3

我想爲異步測試調用done(),但那是行不通的,我越來越'undefined不是函數'錯誤。異步測試不能使用量角器

describe('Login screen tests', function() { 
    var ptor = protractor.getInstance(); 
    beforeEach(function(){ 
    console.log('In before Each method'); 
    ptor.get('http://staging-machine/login/#/'); 
    }); 

    it('Blank Username & Password test', function(done) { 
    ptor.findElement(protractor.By.id("submit")).click(); 
    var message = ptor.findElement(protractor.By.repeater('message in messages')); 
    message.then(function(message){ 
     message.getText().then(function(text) { 
     console.log("Message shown:"+text); 
     expect(message.getText()).toContain('Username or Password can\'t be blank'); 
     done(); 
     }); 
    }); 
    }); 
}); 

我試着谷歌周圍,發現可能有一些問題與茉莉花,但我仍然無法解決此問題。因爲這個錯誤似乎是非常意外的。任何幫助,將不勝感激。

+0

您確實需要調用()完成的論文測試?沒有它的行爲是什麼? –

+0

我沒有得到任何錯誤,如果我不使用'完成'。但我想使用它因爲我有一些異步測試用例運行。爲了使它順序工作,我找到了一個選項來使用「完成」,但我無法在這裏使用它。 – Vikram

+0

我認爲所有的量角器測試都是異步的,而且我看到/寫過的測試不需要調用done()。你能給出更多的背景知道你想達到什麼目的,爲什麼你認爲完成()是必要的? –

回答

2

您確定您收到undefined is not a function在線done()

我認爲你的問題在這裏:ptor.findElement(protractor.By.repeater('message in messages')),因爲那時你的顯然是在一個Angular頁面上,所以關於webdriver的findElement for repeater:你不應該那樣做。

無論如何,我會做兩兩件事:

  1. 升級量角器最新
  2. 重寫整個測試像下面,因爲調用done()這裏並不需要在所有。

重寫:

describe('Login screen tests', function() { 
    // Page Objects. TODO: Extract to separate module file. 
    var submitBtnElm = $('#submit'); 
    var messagesRepElms = element.all(by.repeater('message in messages')); 

    describe('Blank Username & Password test', function() { 
    // Moved login get out of beforeEach since you need to get it once 
    it('Opens an Angular login page', function() { 
     browser.get('http://staging-machine/login/#/'); 
    }); 

    it('Clicks submit btn without entering required fields', function() { 
     submitBtnElm.click(); 
    }); 

    it('Should trigger validation errors', function() { 
     expect(messagesRepElms.first().isPresent()).toBeTruthy(); 
     expect(messagesRepElms.first().getText()). 
     toContain('Username or Password can\'t be blank'); 
    }); 
    }); 
});