Rails / Poltergiest / PhantomJS在测试期间未在application.js中加载文件

时间:2016-09-03 15:59:45

标签: ruby-on-rails phantomjs automated-tests poltergeist

我要求帮助让.js脚本文件中的JS在使用rails进行测试时运行。

如果我将代码放在.js文件中并在application.js的第一行中需要它,那么该脚本就不会运行。在开发中它执行js! (虽然存在语法错误或其他原因)。如果我将.js代码放入< script>中的.html.erb文件中标签,它工作正常!

在撰写本文时,这是我的app/assets/javascripts/application.js

//  LIBRARIES
//= require this_webpage_is_toast
//= require jquery
//= require jquery_ujs
//= require jquery-ui/autocomplete
//= require bootstrap-sprockets
//= require angular
//= require angucomplete-alt
//  LOCAL FILES
//= require libfigure/util
//= require libfigure/move
//= require libfigure/chooser
//= require libfigure/param
//= require libfigure/figure
//= require libfigure/dance
//= require dances
//= require_tree .

注意第一个要求,这就是我知道JS没有运行的方式。这是因为文件app/assets/javascripts/this_webpage_is_toast.js包含:

  document.body.innerHTML = "if you are reading this in a web page, then javascript is successfully executing from a file!"

它从不执行该行。

但它/ apps / with applications.js,因为如果我写

//= require file_that_does_not_exist

它抱怨模板丢失。

毫无疑问,我的一些骨头错误配置错误。

使用phantomjs 2.1.1.0 使用poltergeist 1.10.0

思想?

更新:这些.js文件是如何包含的?事实证明生成的html页面始于:

"<!DOCTYPE html><html><head>\n  <title>Contra</title>\n  <link rel=\"stylesheet\" media=\"all\" href=\"/assets/application.css\">  <script src=\"/assets/application.js\"></script>...

1 个答案:

答案 0 :(得分:2)

我可以想到两个可能的原因。第一个是先前包含的JS文件中的语法错误,防止以下文件在它们全部连接在一起时被处理。由于文件不起作用是第一个文件需要它可能不是那样。第二个原因是您在某些时候有预编译资产,并且在公共/资产中有一个清单文件(可能类似于public / assets / .sprockets-manifest - * .json),这可能会阻止测试环境重建和提供服务。最新版本的资产。尝试删除该文件,或运行rake assets:clobber