Я работаю с Rails 4, RSpec, Capybara и селеном. Я столкнулся с странностью, которую, похоже, не могу решить, пробовав в последний день или около того. У меня довольно простая спецификация запроса, потому что тест не регистрирует изменение модели. Вот моя спецификация:Rails 4 Rspec ожидать {}. Изменить регистрацию, несмотря на то, что тест работает как запланировано.
describe "manage pages", :js => true do
before :each do
@fake_page = FactoryGirl.create(:page_with_block, name: "Foobar")
@fake_page2 = FactoryGirl.create(:page_with_block, name: "sdfdf")
visit admin_pages_path
save_page
end
it "should delete an image when link is clicked" do
expect {
within "#page_#{@fake_page.id}" do
click_link 'Destroy'
end
wait = Selenium::WebDriver::Wait.new ignore: Selenium::WebDriver::Error::NoAlertPresentError
alert = wait.until { page.driver.browser.switch_to.alert }
alert.accept
}.to change(Page, :count).by(-1)
expect(page).to have_content "Listing Pages"
expect(page).not_to have_content "Foobar"
save_page
end
end
Как вы можете видеть, это основной щелчок по уничтожению и подтверждение теста js alert. Проблема заключается в том, что он всегда терпит неудачу:
......F
Failures:
1) Pages manage pages should delete an image when link is clicked
Failure/Error: expect {
expected #count to have changed by -1, but was changed by 0
# ./spec/requests/admin/pages_spec.rb:116:in `block (3 levels) in <top (required)>'
Finished in 11.74 seconds (files took 3.81 seconds to load)
7 examples, 1 failure
По save_page файлов я вложил мне раньше, и один в конце теста, когда я закомментируйте «изменение expect.to», все работает по назначению, поддельные страницы создаются в предыдущем, тест проходит и щелкает, уничтожает и принимает предупреждение, страница уничтожается, а индексная страница перезагружается без нее на контенте. То, что я не понимаю, - это то, почему помощник Change не видит, что он, по сути, работает.
Я прочитал, что это, возможно, придется делать с моим файлом rails_helper.rb, но все, что я посмотрел не похожая, если не точная, установка:
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.include Capybara::DSL
config.before(:suite) do
DatabaseCleaner.strategy = :truncation
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.strategy = :transaction
end
config.before(:each, :js => true) do
DatabaseCleaner.strategy = :truncation
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
config.after(:suite) do
FileUtils.rm_rf(Dir["#{Rails.root}/public/test/system/"])
end
end
Так как я могу найти другого появления этого на Google или этом сайте, я должен просто делать что-то не так. Может ли кто-нибудь указать мне на недостаток в моем коде? Заранее спасибо.
Это то же самое происходит со мной постоянно. По большей части я прибегал (по возможности) к проверке через пользовательский интерфейс самого приложения, чтобы узнать, были ли созданы или уничтожены какие-либо соответствующие записи (-ы), а затем избавиться от этого утверждения. Но есть места, где то, что создано/уничтожено, практически не доступно из пользовательского интерфейса через тест. Вы поняли это случайно? Если это так, я хотел бы узнать решение. – tobogranyte