如何在Rails Capybara JS测试中解释html之前强制加载脚本

时间:2016-07-07 04:50:31

标签: ruby-on-rails angularjs phantomjs capybara poltergeist

在我的文件dances.html.erb中,我的测试抱怨:

Failures:

  1) Creating dances creates a new dance with non-javascript data
     Failure/Error: visit '/dances/new'

     Capybara::Poltergeist::JavascriptError:
       One or more errors were raised in the Javascript code on the page. If you don't care about these errors, you can ignore them by setting js_errors: false in your Poltergeist configuration (see documentation for details).

       ReferenceError: Can't find variable: $
       ReferenceError: Can't find variable: $
           at http://127.0.0.1:33842/dances/new:81 in global code

我认为有问题的HTML代码看起来像

<script>

  $( "#choreographer-autocomplete" ).autocomplete({
    source: <%= a_to_safe_str(Choreographer.all.map &:name) %>,
    autoFocus: true,
    minLength: 0
  });
  $( "#start-type-autocomplete" ).autocomplete({
    source: ["improper","Becket","Becket ccw","four face four","square dance","indecent"],
    autoFocus: true,
    minLength: 0
  });
</script>

和违规电话&#39; $&#39;在这里。 我认为这意味着JQuery没有加载? 如果我剪断它们,那么下一个错误是:

 Failure/Error: JSON.parse self.figures_json

 ActionView::Template::Error:
   784: unexpected token at '{{toJson(figures.arr)}}'

那些把手是一个Angular的东西。 Angular也没有加载吗?

这是我的Rails application.js:

//= require angular
//= require jquery
//= require bootstrap-sprockets
//= require jquery_ujs
//= require_tree .

//= require jquery-ui/autocomplete
//= require angucomplete-alt

这在现实世界中运行良好,而不是在此测试中。

在执行body html之前,我需要做些什么才能加载这些JS库?

1 个答案:

答案 0 :(得分:1)

由于您运行的是最新的PhantomJS,最可能的原因是您的某个JS文件中存在错误。开发和测试环境之间的一个很大区别是,在测试环境中,rails将所有JS文件连接在一起。这意味着一个文件中的错误可能会阻止JS的其余部分被处理。在开发模式下,它们都是分开的,因此一个错误不会阻止其他人被处理。检查浏览器控制台日志中的错误并确保它们已修复。