3

非同期テストのために done() を呼び出そうとしていますが、それが機能していません。「未定義は関数ではありません」というエラーが発生しています。

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();
      });
    });
  });
});

グーグルで調べてみたところ、ジャスミンに問題がある可能性があることがわかりましたが、まだこれを解決できません. エラーは本当に予期しないように見えるためです。どんな助けでも大歓迎です。

4

1 に答える 1

2

本当にundefined is not a function並んでいdone()ますか?

あなたの問題はここにあると思います:ptor.findElement(protractor.By.repeater('message in messages'))それまでにあなたは明らかにAngularページにいるので、リピーターのwebdriverのfindElementに関して:あなたはそれをすべきではありません.

とにかく、私は2つのことをします:

  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');
    });
  });
});
于 2014-08-17T00:47:49.433 に答える