Угловой контроллер не загружается при тестировании с Poltergeist / Capybara

0

Я работаю с рельсами/угловыми в первый раз, и сейчас я только что научился проверять углы с полтергейстом /capybara. Все углы работают отлично в реальном браузере, но при тестировании появляется DOA. Я попытался использовать драгоценный камень "capybara-angular", но ни одна из трех или четырех конфигураций, которые я пробовал, ничего не делала (не говоря уже о чем-то полезном). Я попытался подавить ошибки JS, которые фактически позволяют полтергейсту перейти к фактическому тесту, но это, конечно, не удается, поскольку угловой не инициализирован.

Извините, если это глупый вопрос, но я даже не смог найти кого-либо еще, испытывающего эту ошибку, после двух часов поиска.

Ошибка: Ошибка/Ошибка: click_link "Поиск"

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

   Error: [ng:areq] Argument 'mainCtrl' is not a function, got undefined

rails_helper.rb:

ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)

abort("The Rails environment is running in production mode!") if Rails.env.production?
require 'spec_helper'
require 'rspec/rails'
require 'capybara/poltergeist'

Capybara.javascript_driver = :poltergeist
Capybara.default_driver = :poltergeist

ActiveRecord::Migration.maintain_test_schema!

RSpec.configure do |config|
  config.fixture_path = "#{::Rails.root}/spec/fixtures"
  config.use_transactional_fixtures = false

  config.infer_spec_type_from_file_location!

  config.filter_rails_from_backtrace!

  config.before(:suite) do
    DatabaseCleaner.clean_with(:truncation)
  end

  config.before(:each) do
    DatabaseCleaner.strategy = :transaction
  end

  config.before(:each, :type => :feature) do
    DatabaseCleaner.strategy = :truncation
  end

  config.before(:each) do
    DatabaseCleaner.start
  end

  config.after(:each) do
    DatabaseCleaner.clean
  end
end

angular_test_spec.rb:

require 'rails_helper'

feature "angular test" do
    let(:email){ "[email protected]" }
    let(:password){ "password123" }

before do
    User.create!(email: email,
                password: password,
                password_confirmation: password)
end

    scenario "Angular App is working" do
        visit "/"

        #login
        fill_in "Email", with: "[email protected]"
        fill_in "Password", with: "password123"
        click_button "Log in"

        #Check that navigation worked
        expect(page).to have_content("Home")

        #Test the nav
        click_link "Search"

        #Check that navigation worked
        expect(page).to have_content("Search")


        fill_in "keywords", with: "some item"
        within "section div h3" do
            expect(page).to have_content("some item")
        end
    end 
end

РЕДАКТИРОВАТЬ:

Угловые привязки работают на тестовой странице следующим образом:

<input name="test" ng-model="test">
<p>{{ test }}</p>

Однако контроллеры не загружаются.

EDIT 2:

Я понял, что все работает в dev, но не проверяет, что что-то плохое происходит в конвейере активов и запускается в Google. Я наткнулся на этот блог: http://www.gbonfant.com/blog/debugging-javascript-capybara/ (Улучшенные ошибки JavaScript в тестах Capybara)

Очевидно, что более качественные описания ошибок звучали отлично, поэтому я добавил config.assets.debug = true в /config/environments/test.rb и теперь тесты проходят без каких-либо ошибок. Я подозреваю, что на комментарий Тома Уолпола это работает, потому что Rails обслуживает неконкатенированные активы.

Теги:
poltergeist

1 ответ

2
Лучший ответ

Убедитесь, что вы используете PhantomJS 2. 1+ - PhantomJS <2.0 не поддерживала функцию Function.prototype.bind(), которая требуется угловым

  • 0
    Я использую PhantomJS 2.1.1
  • 0
    Угловые привязки работают согласно редактированию выше.
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню