Я пытаюсь воссоздать состояние состязания в тесте, таким образом, я могу испытать некоторые решения. Я нахожу, что в потоках создаю в своем тесте, ActiveRecord всегда возвращается 0 для количеств и ноля для находок. Например, с 3 строками в таблице "foos":
it "whatever" do
puts Foo.count
5.times do
Thread.new do
puts Foo.count
end
end
end
распечатает
3
0
0
0
0
0
test.log показывает ожидаемый запрос, ожидаемые 6 раз:
SELECT count(*) AS count_all FROM `active_agents`
Какая-либо идея, что продолжается здесь?
Я предполагаю, что ActiveRecord открывает выделенное соединение с базой данных для каждого потока. Поскольку каждый пример RSpec заключен в транзакцию, другие потоки могут не видеть изменений.
Попробуйте отключить фикстуры транзакций для этой спецификации.
describe "thread test" do
self.use_transactional_fixtures = false
it "whatever" do
puts Foo.count
5.times do
Thread.new do
puts Foo.count
end
end
end
end