【发布时间】:2015-02-19 23:52:17
【问题描述】:
我一直在我的 ruby on rails 项目中测试三个模型,使用 rspec 和 factory girl。 我在文件夹中有 3 个文件:spec/models.其中两个包含一个测试,第三个包含 12 个测试。我单独开始的每个测试都遵循绿点。但是如果我运行整个文件夹,只有 12 个测试的文件通过,另外两个失败并显示错误消息:
Failure/Error: @attr = attributes_for(:transaction)
ArgumentError:
Factory not registered: transaction
和其他测试类似。 如果我将两个失败的文件移动到一个单独的文件夹并启动这个新文件夹 - 一个测试通过,另一个失败。但是,如果我从这两个文件中关闭 Factory girl - 都通过了。 这就是我的一些失败测试的样子:
describe Chart do
before(:each) do
Chart.delete_all
@attr = attributes_for(:chart)
end
it "should create a new instance of chart given valid attributes" do
Chart.create!(@attr)
end
end
describe Transaction do
before(:each) do
Transaction.delete_all
@attr = attributes_for(:transaction)
end
it "should create a new instance of transaction given valid attributes" do
Transaction.create!(@attr)
end
end
工厂定义:
require 'factory_girl_rails'
FactoryGirl.factories.clear
FactoryGirl.define do
factory :transaction do |u|
u.code 54321
u.glcode 5
u.amount 100.0
u.date {Date.today}
end
end
它看起来比某处的东西没有被清理但是什么和什么时候? 在 spec_helper 中添加代码:
config.before(:suite) do
DatabaseCleaner.strategy = :truncation
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
没有任何变化。
如果有人可以提供帮助,将不胜感激。谢谢。
【问题讨论】:
-
- 你能给出
:transaction工厂的定义吗? - 并将您的代码示例放在适当的块中,以便更容易阅读? - 你为什么不使用FactoryGirl.create(:transaction)?这种方式一直对我有用。
标签: ruby-on-rails rspec factory-bot