运行我的测试时出现此错误:
FixtureClassNotFound: No class attached to find
导致此错误的原因以及如何解决此问题?
答案 0 :(得分:25)
很有可能发生这种情况是因为自定义表名用于模型(使用set_table_name)或模型位于模块中。
要解决此问题,您需要在set_fixture_class
行之前的test_helper.rb
添加fixtures :all
行:
class ActiveSupport::TestCase
self.use_transactional_fixtures = true
.
.
.
set_fixture_class my_table_name: MyModule::MyClass
fixtures :all
end
在这种情况下,fixtures文件应该被称为my_table_name.yml
答案 1 :(得分:1)
注意:如果您包含堆栈跟踪和完整错误消息,将会很有帮助。
在test / test_helper.rb类中,有一行像
fixtures :all
这告诉框架查看目录test / fixtures并尝试加载它在那里看到的每个YAML文件,然后将它们保存到DB。所以我的预感是你有一个文件在app / models中没有带有单一名称的类。换句话说,如果有一个文件test / fixtures / posts.yml,那么当你运行测试时,框架会查找一个名为Post的类来加载你的数据。
所以我要做的第一件事是检查你是否有一个与你的某个模型类没有关联的夹具文件(也许你删除了一个模型但是忘了删除夹具?)
如果这不起作用,请尝试更改测试助手中的行以显式加载所需的灯具。因此,如果您只想为名为Post的对象和名为User的对象加载fixture,您将更改:
fixtures :all
到
fixtures :posts, :users
在test_helper.rb中你会看到错误消失(虽然现在可能会出现其他错误,因为你的灯具没有加载。
答案 2 :(得分:0)
当我在生成一些脚手架代码时犯了错误,我收到了这个错误。我使用了多个模型名称,这只是混淆了夹具加载,我想。使用单一模型名称重新生成脚手架可以解决问题。
答案 3 :(得分:0)
在类别fish
,sms
等命名方面,类是不规则类的事件
它可以使用--force-plural
标志创建
即
rails g model sms --force-plural
在这种情况下,你会设置一个在下面设置的变形
config/initializers/inflections.rb
这样的一个例子就是这个
ActiveSupport::Inflector.inflections(:en) do |inflect|
inflect.plural /^(ox)$/i, '\1en'
inflect.singular /^(ox)en/i, '\1'
inflect.irregular 'person', 'people'
inflect.uncountable %w( fish sheep )
end
通过这种方式,可以在声明它时识别它