4

我们有一个协作网络应用程序,其中在用户 A 的浏览器中执行的操作将对用户 B 的浏览器产生副作用。聊天室是应用程序的一部分,也是我们尝试测试的一个很好的例子。

我们当前的堆栈是:

  • 前端的 AngularJS
  • Express 在 Node 上运行以提供静态文件
  • Socket.IO 运行在 Node 上,用于处理客户端浏览器之间的 Web 套接字通信
  • 为我们的构建过程提供早午餐
  • Angular Seed 是我们测试的起点
  • Jasmine 用于实际测试框架
  • Testacular 运行测试

进行测试的最佳方法是什么?“最好”是指“任何”。完整的集成测试需要 2 个浏览器和 2 个 Web 服务器(HTML 和 Web 套接字)。两个 Web 服务器都在 Node 上运行,因此至少它与 Testacular 的其余部分处于相同的环境中。

在我看来,这将需要

  1. 启动我们的套接字服务器实例
  2. 在 Jasmine 中启动 Web 浏览器,并保留对该浏览器 A 的引用
  3. 启动另一个浏览器,浏览器 B,并保留该引用。
  4. 向浏览器 A 发出命令并在浏览器 B 中测试由此产生的变化。

有没有人遇到过这种测试的文档或示例(最好是在带有 Jasmine 的 Testacular 中,但我们对选项持开放态度)?甚至关于使用哪些搜索词的建议也会有所帮助。

4

1 回答 1

0

我不确定我的建议是否会对您有所帮助,但无论如何。

我想到的第一个工具是Selenium。好消息(基于您当前使用的堆栈)是您可以JavaScript用于编写测试。下面是一个示例,它搜索术语“Cheese” Google,然后将结果页面的标题输出到控制台:

var driver = new webdriver.Builder().build();
driver.get('http://www.google.com');

var element = driver.findElement(webdriver.By.name('q'));
element.sendKeys('Cheese!');
element.submit();

driver.getTitle().then(function(title) {
  console.log('Page title is: ' + title);
});

driver.wait(function() {
  return driver.getTitle().then(function(title) {
    return title.toLowerCase().lastIndexOf('cheese!', 0) === 0;
  });
}, 3000);

driver.getTitle().then(function(title) {
  console.log('Page title is: ' + title);
});

driver.quit();

我认为使用 Selenium 2 有可能“打开”更多浏览器实例——这意味着您将能够测试它们之间的副作用/交互。

作为替代方案,您还可以查看使用 Selenium 或(Spudley 也提到)Sahi作为测试驱动程序的WindMill项目、UItest.js或商业产品Twist

于 2013-03-08T19:39:48.813 回答