Я пытаюсь запустить интеграционные тесты на Rails, используя RSpec Capybara и драйвер selenium-chrome.
Я также использую гем capybara-angular.
Я немного смущен тем, что именно происходит, поскольку я не вижу свои сценарии, когда я сплю, мой тест rspec проверяет вкладку источников в отладчике Chrome, похоже, что мои активы не загружены, хотя кажется, что операторы ng-if работают, поскольку страница скрыта.
Так что я не совсем уверен, что происходит. Страница работает, как и ожидалось, в процессе разработки, но переменные в $scope не устанавливаются в тесте.
Это моя настройка в "system.rb
RSpec.configure do |config|
config.before(:each, type: :system) do
driven_by :rack_test
end
config.before(:each, type: :system, js: true) do
driven_by :selenium_chrome
end
end
require "capybara-screenshot/rspec"
include Capybara::Angular::DSL
Вот тест, который я запускаю:
it "shows changes to the budget when the budget is changed", :js do
visit(root_path)
sleep 0.5
fill_in "inputEmail", with: "[email protected]"
fill_in "password", with: "test"
click_on("Log In")
sleep 0.25
click_on("Budgeting")
sleep 10
expect(page).to have_selector("#current_project_name", text: "Project A")
expect(page).to have_selector("#budgetInput1")
fill_in "#budgetInput1", with: "100"
# Fail on next line with 'expected to find visible css "#budgetInput1" but there were no matches'
page.should have_selector("#budgetInput1", text: "100") # <--test fails with
end
Насколько я могу судить, причина, по которой он не найден, заключается в том, что элемент появляется в div с ng-if="showBudget"
. $scope.showBudget=true
установлен в контроллере, но контроллер, похоже, не загружается, а {{showBudget==unknown}}
возвращает true
, что предполагает, что AngularJS загружается, но скрипты, загруженные манифестом для страницы, нет.
Как это исправить?