Капибара - Полтергейст - JavascriptError: Undefined не является конструктором

У меня есть эта странная ошибка в новом проекте, где я хочу работать с Angular и сделать ajax-поиск по поддельным данным. Поиск работает, но когда я пытаюсь создать тест со средой PhantomJS, Capybara, Rspec, Webpack и angular, возникает ошибка. Версии:

  • phantomjs: 2.1.1 (проверяется в консоли с phantomjs -v
  • webpacker (3.0.2 3b09f78)
  • websocket-драйвер (0.6.5)
  • websocket-extensions (0.1.2)
  • rspec-core (3.7.0)
  • рельсы rspec (3.7.1)
  • капибара (2.15.4)

Вот моя тестовая спецификация /features/product_search_spec.rb:

require 'rails_helper'

feature 'product search' do
  let(:email) {"username@mail.dk"}
  let(:password) {"passwordpassword"}

  before do
    create_test_user(email, password)

    create_product("Christan", "Zebra", "Andersen")
    create_product("Mathias", "Aude", "Zebra")
    create_product("Zebaa", "Zulu", "Hest")
    create_product("Aaaaaaaaa", "Zebra", "Aaaaaaa") # Første produkt, der bliver vis

  end

  scenario "Search by title" do
    visit root_path
    fill_in "Email", with: email
    fill_in "Password", with: password
    click_button "Log in"

    click_link "Gå til produktsøgning"

    sleep 1
    puts page.body
    within ".search-form" do
      fill_in "keywords", with: "Zeb"
    end

    within "section.search-results" do
      expect(page).to have_content("Zebra")
      list_group_items = page.all("ol li.list-group-item")
      expect(list_group_items.count).to eq(4)
      expect(list_group_items[0]).to have_content("Zebaa") # Er det sorteret rigtigt?
    end

  end
end

def create_test_user email, password
  User.create!(
    email: email,
    password: password,
    password_confirmation: password
  )
end

# For at jeg og senere udvikler tydeligt kan se hvilken test-data, som det er vi arbejder med.
def create_product title, subtitle, authors
  title ||= Faker::Internet.username
  subtitle ||= Faker::Internet.domain_name
  authors ||= Faker::FamilyGuy.character

  Product.create!(
    title: title,
    subtitle: subtitle,
    authors: authors
  )
end

Когда я бегу rails spec SPEC=spec/features/product_search_spec.rb

Я получаю сообщение об ошибке в терминале:

product search Search by title
     Failure/Error: click_link "Gå til produktsøgning"

     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).

       TypeError: undefined is not a constructor (evaluating 'Object.assign({}, merged, opt)')
       TypeError: undefined is not a constructor (evaluating 'Object.assign({}, merged, opt)')

Я читал много веток, и некоторые из них были о том, что phantomjs не может работать с ES6, но более новая версия 2.1.1 должна быть в порядке с этим.

Я надеюсь, что кто-то может указать мне правильное направление.

2 ответа

Я пытался внедрить Selenium, но для запуска Xcode мне понадобился мой Mac.

У меня есть El Capitan, поэтому я установил старую версию на форуме поддержки Apple, но она не сработала. (И это занимает до 12,7 ГБ!) Я попытался найти ответ снова с PhantomJS и нашел ответ здесь, где они говорят о Бабеле.

Итак, я добавил:

import "babel-polyfill";

наверх, мой js-файл, тест прошел успешно, и теперь я могу продолжить свою работу!

Версия 2.1.1 PhantomJS примерно эквивалентна 7-летней версии Safari. Он не поддерживает ES6, и вам потребуется перенести и заполнить весь код JS, чтобы быть совместимым с ES5, чтобы использовать его. Была бета-версия PhantomJS 2.5, которая немного приблизила его к поддержке современных браузеров, но от нее отказались, просто рекомендовав использовать хром без головы, если вы хотите / нуждаетесь в тестировании без поддержки с ES6.

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