Я нажимаю показать и уничтожить ссылки с Capybara, которые должны быть в первой строке таблицы в таблице сотрудников.Таблица должна быть отсортирована так, чтобы последний измененный сотрудник находился сверху, на основе отметки времени updated_at.
Перед примером должен быть создан действительный сотрудник, который проходит проверку подлинности.Затем в начале примера необходимо создать сотрудника для тестирования. Этот - это сотрудник, который всегда должен быть наверху таблицы, потому что он должен был изменяться совсем недавно.Иногда это так, а иногда нет.Добавление спящего вызова исправляет это, и мне интересно, верно ли это или я ошибся.Я думал, что добавление вызова сна в тесте было плохой вещью.Я также подумал, что если сотрудник проверки подлинности будет создан перед примером, то даже если моя спецификация работает очень быстро, он все равно должен иметь более раннюю отметку времени updated_at.
Макрос проверки подлинности:
module AuthenticationMacros
def login_confirmed_employee
# create a valid employee for access
Factory :devise_confirmed_employee,
:username => 'confirmed.employee',
:password => 'password',
:password_confirmation =>'password'
# sign in with valid credentials
visit '/employees/sign_in'
fill_in 'Username', :with => 'confirmed.employee'
fill_in 'Password', :with => 'password'
click_on 'Sign In'
end
end
Спрашиваемая спецификация запроса:
require 'spec_helper'
include AuthenticationMacros
describe "Employees" do
before do
login_confirmed_employee
end
# shows employees
it "shows employees" do
sleep 1.seconds
Factory :employee_with_all_attributes,
:username => 'valid.employee',
:email => 'valid.employee@example.com',
visit '/employees'
within 'tbody tr:first-child td:last-child' do; click_on 'Show', end
page.should have_content 'valid.employee'
page.should have_content 'valid.employee@example.com'
end
# destroys employees
it "destroys employees" do
sleep 1.seconds
Factory(:employee)
visit '/employees'
within 'tbody tr:first-child td:last-child' do; click_on 'Delete', end
page.should have_content 'Employee was successfully deleted.'
end
end
И для хорошей цели вот мой spec_helper:
require 'spork'
Spork.prefork do
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
ActiveSupport::Dependencies.clear
require 'email_spec'
RSpec.configure do |config|
config.include EmailSpec::Helpers
config.include EmailSpec::Matchers
end
end
Spork.each_run do
require 'rspec/rails'
require 'factory_girl_rails'
require 'capybara/rspec'
require 'capybara/rails'
require 'shoulda'
RSpec.configure do |config|
config.mock_with :rspec
config.use_transactional_fixtures = false
config.before(:suite) do
DatabaseCleaner.strategy = :truncation
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end
end
Иногда я оказываюсь на странице шоу или уничтожаю сотрудника, требующего аутентификацию вместоНапример, сотрудник. Это никогда не произойдет, если я добавлю 1-секундный вызов в спящем режиме.