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
私のテストから:
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