我的模型是CWB::Account
(它们是命名空间的,因为我继承了这个项目并且他们使用了一些保留字作为模型名称)
我使用minitest-spec-rails gem进行测试,我收到此错误 -
ActiveRecord::FxitureClassNotFound: No class attached to find.
测试/测试helper.rb
...
class ActiveSupport::TestCase
fixtures :all
end
...
测试/控制器/ sessions_controller_test.rb
require 'test_helper'
class SessionsControllerTest < ActionDispatch::IntegrationTest
before do
account_one = Accounts(:account_one)
register(account_one)
end
...
测试/装置/ accounts.yml
account_one:
id: 1
name: testnameone
email: one@gmail.com
password_hash: passwordone
...
如果我在test_helper.rb中执行此操作
set_fixture_class :accounts => 'CWB::Account'
fixtures :all
我收到错误 - StandardError no fixture named <CWB::Account:0x0000004bdf32> found for fixture set 'accounts'
修改
有趣的更新,如果我将account.yml放在fixtures / cwb / accounts.yml中我得到一堆关于循环依赖的错误
但如果我把它放在fixture / CWB / accounts.yml(注意大写)我收到错误说
undefined method accounts for ...
答案 0 :(得分:11)
1)将你的灯具放在/test/fixtures/cwb/accounts.yml
中2)调用cwb_accounts(:account_one)获取记录
require 'test_helper'
class SessionsControllerTest < ActionDispatch::IntegrationTest
before do
account_one = cwb_accounts(:account_one)
register(account_one)
end
...
答案 1 :(得分:2)
我遇到了同样的错误,并将我所做的一切都合并到了这个答案中。
从Brett Allred回答,但只加载特定的命名夹具: (将夹具放入/test/fixtures/cwb/accounts.yml后)
require 'test_helper'
class SessionsControllerTest < ActionDispatch::IntegrationTest
fixtures: 'cwb/accounts'
before do
account_one = cwb_accounts(:account_one)
...
来自infused的答案,但假设命名空间的表名(如在完整引擎中):
set_fixture_class 'cwb/accounts' => CWB::Account
我实际上使用的是rspec和命名空间的表名。我认为OP的唯一区别是
set_fixture_class 'accounts' => CWB::Account
因为他的表没有命名空间(只是模型)
答案 2 :(得分:1)
该类应该是实际的类,而不是字符串:
set_fixture_class :accounts => CWB::Account