AnA*_*ice 37 rspec ruby-on-rails ruby-on-rails-3
我正在使用rspec来测试我的rails 3 app.我需要在测试开始之前播种数据库.如何使用以下内容为数据库设定种子:
/db/seeds.rb
["Admin", "Member"].each do |role_name|
Role.find_or_create_by_name(role_name)
end
Run Code Online (Sandbox Code Playgroud)
谢谢
Han*_*nes 157
在spec_helper.rb中:
RSpec.configure do |config|
config.before(:suite) do
Rails.application.load_seed # loading seeds
end
end
Run Code Online (Sandbox Code Playgroud)
Mic*_*pko 22
然而,Scott的解决方案肯定适合您,我相信解决您问题的更好方法是将代码负责在RSpec的配置块中为您的测试数据库播种:
我使用SeedFu,在我的spec_helper中,我有:
RSpec.configure do |config|
# some other configuration code ...
config.before(:suite) do
# ...
SeedFu.seed
# ...
end
# some other configuration code ...
end
Run Code Online (Sandbox Code Playgroud)
fea*_*ool 10
我一直在用rake自动加载来自db/seeds.rb的种子数据.顽固分子坚持认为你永远不应该为测试加载种子数据,但我采取更温和的立场,即你可能想要为特定测试加载种子数据,例如验证种子数据是否存在.
与此处给出的一些答案不同,我不建议无条件地从spec_helper文件中加载种子.相反,您可以使用before :each
或before :all
仅在需要种子的测试文件中加载种子,例如:
describe "db seed tests" do
before(:each) do
load "#{Rails.root}/db/seeds.rb"
end
...your test code here...
end
Run Code Online (Sandbox Code Playgroud)
正如@marzapower指出的那样,如果你走这条路线,你的seeds.db文件应该在创建条目或使用find_or_create_by
方法之前清除每个表.(提示:前者更快,更可靠.)如果您多次加载seeds.db文件,这将防止重复条目.
尝试,像这样的东西
rake db:seed RAILS_ENV=test
Run Code Online (Sandbox Code Playgroud)
您可以获取所有rake命令的列表
rake -T
Run Code Online (Sandbox Code Playgroud)
如果这是测试数据,您可能希望将其放入将在测试开始时加载的灯具中.
要在 rspec 中加载种子,您需要在 spec_helper 的 confg.before(:suite) 中的数据库清理后添加它
config.before(:suite) do
DatabaseCleaner.clean_with(:truncation)
load Rails.root.join('db', 'seeds.rb')
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
28193 次 |
最近记录: |