我们在Rails 4.1应用程序中开始了Reactjs集成的过程。关键是现在很多功能都被破坏了。

这是测试堆栈:

  • cucumber
  • capybara
  • Poltergeist(通过phantomjs)
  • Rspec

  • 例如,有 cucumber 功能:
    @javascript @services
    
    Feature: Manage Service
      Scenario Outline: Publish and archieve
        Given the individual user
        When I visit services page
        And I click on I18n translation for key "views.labels.add"
        And I fill service's fields and choose price as "<price>"
        And I click on I18n translation for key "<submit_btn>"
        Then I should see I18n translation for key "<message>"
        And Created service should have 1 tag
    
      Examples:
        | submit_btn                 | price      | message                                       |
        | views.labels.publish       | fixed      | views.messages.notices.add.created            |
        | views.labels.publish       | negotiated | views.messages.notices.add.created            |
    

    当我运行此测试时,我看到此错误:
      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).
    
      TypeError: 'undefined' is not a function (evaluating 'RegExp.prototype.test.bind(
          /^(data|aria)-[a-z_][a-z\d_.\-]*$/
        )')
      TypeError: 'undefined' is not a function (evaluating 'RegExp.prototype.test.bind(
          /^(data|aria)-[a-z_][a-z\d_.\-]*$/
        )')
          at http://127.0.0.1:53686/assets/application.js:32342
          at http://127.0.0.1:53686/assets/application.js:28807 in s
          at http://127.0.0.1:53686/assets/application.js:28807
          at http://127.0.0.1:53686/assets/application.js:37581
          at http://127.0.0.1:53686/assets/application.js:28807 in s
          at http://127.0.0.1:53686/assets/application.js:28807
          at http://127.0.0.1:53686/assets/application.js:32910
          at http://127.0.0.1:53686/assets/application.js:28807 in s
          at http://127.0.0.1:53686/assets/application.js:28807 in e
          at http://127.0.0.1:53686/assets/application.js:47260
          at http://127.0.0.1:53686/assets/application.js:28807
          at http://127.0.0.1:53686/assets/application.js:47262 (Capybara::Poltergeist::JavascriptError)
      ./features/step_definitions/service.steps.rb:16:in `/^the individual user$/'
      features/service/new.feature:9:in `Given the individual user'
    

    最佳答案

    我找到了解决方案。您需要为此使用shim。我把文件放在vendor/assets/javascripts/es5-shim.js中。

    之后,您需要初始化此填充程序。请注意,shim应该在响应的init之前传递给,这很关键!

    application.js

    //= require es5-shim
    //= require react
    //= require react_ujs
    

    之后,测试再次开始工作。

    10-02 20:10