在AngularJS中继续测试之前,量角器没有等待登录重定向,有什么建议吗?

时间:2014-11-14 14:13:03

标签: login wait angular-ui-router protractor

我有一个标准的用户名/密码/提交按钮表单,当用户点击表单提交的按钮时ng-submit="login.submit()"登录并成功使用ui.router重定向到主页面({{ 1}})。

以下测试失败:

$state.go("main")

如果我尝试添加等待时间,我可以看到浏览器一直停留在登录页面上(点击按钮后) - 然后我就会超时。

成功登录后,浏览器会收到一个带有令牌的cookie,用于验证每个后续请求。

编辑:经过一些修修补补,我发现了失败的地方..

  describe("login", function() {
    beforeEach(function() {
      var email = element(by.model("login.email"));
      email.clear().sendKeys("mail");

      var password =  element(by.model("login.password"));
      password.clear().sendKeys("pass");

      var submit = element(by.id("submit"));
      submit.click();
    });

    it("should be able to login", function() {
      expect(element(by.css(".loginPage")).isPresent()).toBe(false);
      expect(element(by.css(".mainPage")).isPresent()).toBe(true);
    });
  });

EDIT2:Auth服务

function login(email, pass) {
  alert("it gets here");
  return _auth.post({ username: email, password: pass }).then(function(data) {
    alert("does not get here");
    console.log("loginok, token:" +$browser.cookies().apiToken); //this should be the received token
    return data;
  });
}

手动一切都按预期工作。

2 个答案:

答案 0 :(得分:3)

@ JoMendez的答案非常接近,但在我的案例中没有用。使用@ DaveGray的here

必须将isPresent()调用包装在函数中。

browser.wait(function() {
  return element(by.css('.mainPage')).isPresent();
});

答案 1 :(得分:2)

试试这个:

it("should be able to login", function() {

  browser.wait(element(by.css(".mainPage")).isPresent);//this is different from sleep, this will stop the excecution of all the protractor code that is after it, until the element is present, but it won't prevent the application of loading or if is redirecting, it will keep working.

  expect(element(by.css(".loginPage")).isPresent()).toBe(false);
  expect(element(by.css(".mainPage")).isPresent()).toBe(true);
});

});