Rails - тестирование scoped destroy_all игнорирует область - PullRequest
0 голосов
/ 23 мая 2018

Я установил функцию мягкого удаления (без использования драгоценного камня Paranoia): пользователь может быть удален программным способом, а затем объект destroy_all навсегда удалит всех пользователей, удаленных программным способом.Он работает в разработке, но я не могу пройти тестирование.Тест запрашивает с областью, но уничтожает всех пользователей независимо.

Область в User.rb scope :only_deleted, -> { where.not(deleted_at: nil) } находит всех удаленных пользователей.В контроллере у меня есть:

def destroy_soft_deleted
  User.only_deleted.destroy_all
  ...
end

Я попробовал этот тест (и многие другие комбинации):

def setup
  @user1 = users(:adam)
  @user2 = users(:beth)
end
test "successful permanent deletion of all soft-deleted users" do
  @user2.soft_delete
  assert_difference "User.count", -1 do
    delete destroy_soft_deleted_users_path
  end
end

Все остальные тесты пройдены (например, @user.soft_delete проверен) и приспособленияявляются хорошим.Журнал тестов показывает, что область используется, но все равно удаляет обоих пользователей:

SELECT "users".* FROM "users" WHERE ("users"."deleted_at" IS NOT NULL)
DELETE FROM "users" WHERE "users"."id" = ?[0m  [["id", 585460615]]
DELETE FROM "users" WHERE "users"."id" = ?[0m  [["id", 911064266]]

Вот результат теста:

"User.count" didn't change by -1.
  Expected: 1
  Actual: 0

Не работает ли Model.some_scope.destroy_all в тестах?Есть ли другое утверждение, которое я должен использовать?

...