gpt4 book ai didi

ruby-on-rails - database_cleaner 没有清除我的一些测试(rspec、capybara、selenium)

转载 作者:行者123 更新时间:2023-12-02 05:33:41 24 4
gpt4 key购买 nike

database_cleaner 在大部分情况下都有效,但在某些情况下,我希望在每次测试后清除 user_id 之类的东西,但它不会。因此,user_id 将自始至终递增而不是清除,并且用户 id 可预测为 1、2、3 或为测试创建的任何数量。我可以只调用 id 而不是对预期结果进行硬编码,但后来我真的需要它来清除更复杂示例中的内容。这是最容易展示的。任何帮助将不胜感激。

来自 SPEC_HELPER.RB:

RSpec.configure do |config|

config.mock_with :rspec
config.include FactoryGirl::Syntax::Methods

config.include(Capybara, :type => :integration)
config.include Devise::TestHelpers, :type => :controller
config.use_transactional_fixtures = false

config.before(:each) do
I18n.default_locale = :en
I18n.locale = :en
DatabaseCleaner.start
ResqueSpec.reset!
ActionMailer::Base.deliveries.clear
end

config.after(:each) do
DatabaseCleaner.clean
end

config.after(:all) do
TestCleaner.clean
end

config.before(:suite) do
DatabaseCleaner.clean_with(:truncation)
DatabaseCleaner.strategy = :transaction
Role.reset_cache!
end

config.after(:suite) do
DatabaseCleaner.clean_with(:truncation)
end

来 self 的测试:

      it "should return one provider" do
get :index

response.body.gsub(/\s+/, "").should == {
:experts => [{
:availability => false,
:name => "#{@provider.user.first_name}#{@provider.user.last_name}",
:expert_id => 1,
:photo => @provider.details.photo.url
}] }.to_json
end

it "should show return two providers" do
@provider2 = create(:provider)
get :index

response.body.gsub(/\s+/, "").should == {
:experts => [{
:availability => false,
:name => "#{@provider.user.first_name}#{@provider.user.last_name}",
:expert_id => 1,
:photo => @provider.details.photo.url
},
{
:availability => false,
:name => "#{@provider.user.first_name}#{@provider.user.last_name}",
:expert_id => 2,
:photo => @provider.details.photo.url
}
] }.to_json
end

最佳答案

数据库清理器将您的每个规范包装在一个事务中,并在规范结束时回滚该事务以删除任何数据库更改。回滚事务不会重置用于自动分配主键的自动增量或序列值。

我强烈建议不要对 ID 进行硬编码。您提到您的示例会变得更加复杂,在这种情况下,在您的代码中散布随机整数将比更简单的示例更难维护。假设你使用的是 mysql 然后使用截断策略将重置自动增量值,但它也慢了很多。

关于ruby-on-rails - database_cleaner 没有清除我的一些测试(rspec、capybara、selenium),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11996522/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com