Add working protractor e2e test.

This uses the ignoreSynchronization flag because of the longpoll on the event
stream. It would be better to use $interval, but couldn't get that to
*reliably* work when testing. I suspect that $interval won't help us here,
since there is genuinely an open $http connection, as we're doing a long
poll. https://github.com/angular/protractor/issues/49 for more info.
This commit is contained in:
Kegan Dougal 2014-09-22 16:50:12 +01:00
parent 90f5eb1270
commit 95acf63ea3
4 changed files with 26 additions and 8 deletions

View File

@ -18,7 +18,7 @@ on. If you do, edit the config to point to that url):
Create a file "environment-protractor.js" in this directory and type: Create a file "environment-protractor.js" in this directory and type:
module.exports = { module.exports = {
seleniumAddress: 'http://localhost:4444/wd/hub', seleniumAddress: 'http://localhost:4444/wd/hub',
loginUrl: "http://localhost:8008/_matrix/client/#/login", baseUrl: "http://localhost:8008",
username: "YOUR_TEST_USERNAME", username: "YOUR_TEST_USERNAME",
password: "YOUR_TEST_PASSWORD" password: "YOUR_TEST_PASSWORD"
} }
@ -26,6 +26,7 @@ on. If you do, edit the config to point to that url):
Running e2e tests: Running e2e tests:
protractor protractor.conf.js protractor protractor.conf.js
NOTE: This will create a public room on the target home server.

View File

@ -0,0 +1,16 @@
var env = require("../environment-protractor.js");
describe("home page", function() {
beforeEach(function() {
ptor = protractor.getInstance();
// FIXME we use longpoll on the event stream, and I can't get $interval
// playing nicely with it. Patches welcome to fix this.
ptor.ignoreSynchronization = true;
});
it("should have a title", function() {
browser.get(env.baseUrl);
expect(browser.getTitle()).toEqual("[matrix]");
});
});

View File

@ -1,6 +0,0 @@
describe("user page", function() {
it("should have a title", function() {
browser.get("http://matrix.org/alpha/#/login");
expect(browser.getTitle()).toEqual("[matrix]");
});
});

View File

@ -3,9 +3,16 @@ exports.config = {
seleniumAddress: env.seleniumAddress, seleniumAddress: env.seleniumAddress,
specs: ['e2e/*.spec.js'], specs: ['e2e/*.spec.js'],
onPrepare: function() { onPrepare: function() {
browser.driver.get(env.loginUrl); browser.driver.get(env.baseUrl);
browser.driver.findElement(by.id("user_id")).sendKeys(env.username); browser.driver.findElement(by.id("user_id")).sendKeys(env.username);
browser.driver.findElement(by.id("password")).sendKeys(env.password); browser.driver.findElement(by.id("password")).sendKeys(env.password);
browser.driver.findElement(by.id("login")).click(); browser.driver.findElement(by.id("login")).click();
// wait till the login is done, detect via url change
browser.driver.wait(function() {
return browser.driver.getCurrentUrl().then(function(url) {
return !(/login/.test(url))
});
});
} }
} }