【问题标题】:How do I run functional tests in Intern against a backbone app being served up by rails?如何在 Intern 中针对 Rails 提供的主干应用程序运行功能测试?
【发布时间】:2014-03-20 19:03:12
【问题描述】:

在实习生页面上的所有示例中,静态 html 文件都在为某些前端框架(骨干网、ember 等)提供服务。所以在功能测试示例中,静态 html 文件的路径被传递给 get 方法。

this.remote.get(require.toUrl('index.html'))

在我的例子中,rails 应用程序提供托管主干应用程序的 html 页面。有没有办法让实习生在 Rails 提供主干应用程序时使用它?我发现让功能测试运行的唯一方法是将正在运行的 rails 应用程序的 url 传递给 get 方法。 (通过nginx运行)

this.remote.get('http://localhost/')

虽然这允许功能测试运行,但它不会通过端口 9000 上的侦听器。因此,我没有得到覆盖率统计信息。

【问题讨论】:

    标签: intern


    【解决方案1】:

    不幸的是,检测服务器不可配置为尝试从另一个 HTTP 服务器检索文件,它只会从本地磁盘读取文件,因此无法将其用作检测由此时的 Rails 应用程序,除非它们实际上是由 nginx 静态服务的(在这种情况下,您可以set up a reverse proxy to Intern for your JavaScript files)。

    如果您可以重新配置 Rails 以从检测服务器而不是文件系统中提取 JavaScript,那将是可行的。您还可以尝试通过 Istanbul 的命令行工具运行文件来预先检测您的 JavaScript 代码:

    istanbul instrument --variable __internCoverage --no-compact --output output-dir input-dir
    

    【讨论】:

    • 首先,使用 istanbul 预先检测文件对我来说是一个可行的解决方案,尽管它要求我修改我的 require js 配置中的文件路径以在测试时从检测的文件目录中读取。我认为 nginx 反向代理解决方案将是更清洁的解决方案,但我似乎无法让它发挥作用。由于 javascript 文件由 rails 资产管道提供,因此我将 /assets/ 目录反向代理到 localhost:9000。不幸的是,这导致资产目录中的任何文件都出现 502(错误网关)。不确定是否有解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 2017-12-27
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 2013-08-06
    相关资源
    最近更新 更多