2015-06-23 4 views
1

У меня есть очень базовое интегрированное рельсовое угловое приложение. Он просто делает ссылку, которая использует данные из запроса GET на рельсах:Может ли rspec использоваться для тестирования встроенного рельсово-углового приложения?

'use strict'; 

angular.module('angularRspec.controllers') 
    .controller('FightersController', 
    function($scope, $http){ 
     console.log("FightersController is loaded..."); 
     $scope.fighters = []; 
     $http.get('./fighters.json'). 
     success(function(data, status){ 
      $scope.fighters = data; 
      console.log(status); 
      console.log(data); 
     }). 
     error(function(data, status, headers, config) { 
      console.log(status); 
      console.log(headers); 
     }); 
    }); 

Когда я бегу спецификации, как это, и использовать совать нос, моя ссылка не появляется:

require 'rails_helper' 

feature 'Index of Fighters' do 

    let!(:fighter) { create(:fighter) } 

    scenario 'User visits home', js: true do 
    visit '/' 
    binding.pry 
    expect(true).to eq true 
    end 
end 

Но, У меня есть подтверждение от консоли, что угловая загрузка в тестовом браузере, а ответ - 200. Проблема не является специфичной для браузера. Я разместил репо здесь: angular_rspec.

Вот мой spec_helper.rb:

ENV["RAILS_ENV"] ||= 'test' 
require File.expand_path("../../config/environment", __FILE__) 
require 'rspec/rails' 
require 'rspec/autorun' 
require 'capybara' 

Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f } 

RSpec.configure do |config| 

    config.expect_with :rspec do |expectations| 
    expectations.include_chain_clauses_in_custom_matcher_descriptions = true 
    end 

    config.mock_with :rspec do |mocks| 
    mocks.verify_partial_doubles = true 
    end 

    Capybara.javascript_driver = :selenium 

end 

А вот мой rails_helper.rb:

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

Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f } 

ActiveRecord::Migration.check_pending! 

RSpec.configure do |config| 
    config.fixture_path = "#{::Rails.root}/spec/fixtures" 
    config.use_transactional_fixtures = true 
    config.infer_spec_type_from_file_location! 
end 

Вот мой макет:

<!DOCTYPE html> 
<html lang="en" ng-app="angularRspec"> 
    <head> 
    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <title><%= content_for?(:title) ? yield(:title) : "angular rspec" %></title> 
    <%= csrf_meta_tags %> 
    <%= stylesheet_link_tag "application", :media => "all" %> 
    </head> 
    <body> 
    <div class="container"> 
     <h1>Angular Rspec</h1> 
     <div ng-view></div> 
     <div ng-controller="FightersController" id="primary"></div> 
    </div> 
    <%= javascript_include_tag "application" %> 
    </body> 
</html> 

ответ

2

Я предполагаю, что ваш вызов create(:fighter) выполняется в другом потоке (и транзакции базы данных), чем запрос на получение AJAX. Попробуйте добавить этот фрагмент к rails_helper.

class ActiveRecord::Base 
    mattr_accessor :shared_connection 
    @@shared_connection = nil 

    def self.connection 
    @@shared_connection || retrieve_connection 
    end 
end 
ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection 

Источник: https://github.com/jnicklas/capybara#transactions-and-database-setup

+0

Вот и все! Спасибо! –

0

Вам необходимо включить javascript driver for capybara:

Capybara.current_driver = Capybara.javascript_driver 
+0

Спасибо! Я сбросил эту строку сразу после 'Capybara.javascript_driver =: selenium', но, похоже, это не помогло. –

Смежные вопросы