dro*_*lot 1 rspec ruby-on-rails capybara database-cleaner factory-bot
我有RSpec可安装的Rails引擎:
RSpec.configure do |config|
config.use_transactional_fixtures = false
config.before(:suite) do
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do |example|
DatabaseCleaner.strategy= example.metadata[:js] ? :truncation : :transaction
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end
Run Code Online (Sandbox Code Playgroud)
简单工厂:
FactoryGirl.define do
factory :post, :class => MyEngine::Post do
title 'title'
end
end
Run Code Online (Sandbox Code Playgroud)
水豚特色:
require 'spec_helper'
describe 'Post', :type => :feature do
let(:post) { FactoryGirl.create :post }
it 'index action should have post' do
visit posts_path
expect(page).to have_text(post.title)
end
end
Run Code Online (Sandbox Code Playgroud)
Post模型没有任何验证.
但是当我运行测试时,它表明没有创建帖子.
还有ActiveRecord日志:
INSERT INTO "my_engine_posts" ...
RELEASE SAVEPOINT active_record_1
rollback transaction
Run Code Online (Sandbox Code Playgroud)
此规范将始终失败.
let在RSpec是延迟加载.post在您引用它之前,实际上并未创建:
expect(page).to have_text(post.title)
Run Code Online (Sandbox Code Playgroud)
因此,您可以在访问页面之前使用let!哪个不是延迟加载或引用post:
require 'spec_helper'
describe 'Post', :type => :feature do
let(:post) { FactoryGirl.create :post }
it 'index action should have post' do
post
visit posts_path
expect(page).to have_text(post.title)
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
355 次 |
| 最近记录: |