Капибара, Полтергейст и Реактжс - "undefined" не является функцией

Мы начали процесс интеграции Reactjs в нашем приложении Rails 4.1. Дело в том, что многие функции теперь не работают.

Вот стек для тестов:

  • Огурец
  • Водосвинка
  • Полтергейст (через фантомов)
  • Rspec

Например, есть функция огурца:

@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'

1 ответ

Я нашел решение. Вы должны использовать шим для этого. Я положил файл в vendor/assets/javascripts/es5-shim.js,

После этого вам нужно инициировать эту прокладку. Обратите внимание, что шим должен идти до инициации реакции, это важно!

application.js

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

После этого тесты снова начали работать.

Другие вопросы по тегам