Capybara, Poltergeist and Reactjs - 'undefined' is not a function

We started the Reactjs integration Reactjs in our Rails 4.1 application. The fact is that now there are many functions.

Here is the stack for tests:

  • Cucumbers
  • Capybara
  • Poltergeist (via phantomjs)
  • Rspec

For example, there is a cucumber function:

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

When I run this test, I see this error:

  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_][az\d_.\-]*$/ )') TypeError: 'undefined' is not a function (evaluating 'RegExp.prototype.test.bind( /^(data|aria)-[a-z_][az\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' 
+6
source share
1 answer

I have found a solution. For this you need to use shim . I put the file in vendor/assets/javascripts/es5-shim.js .

After that, you need to initialize this gasket. Please note that the gasket must go BEFORE reacting to initialization, this is important!

application.js

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

After that, the tests started working again.

+7
source

Source: https://habr.com/ru/post/976012/


All Articles