如何将夹具加载到命名空间模型表中?

时间:2014-07-30 18:40:37

标签: ruby-on-rails minitest

我的模型是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 ...

3 个答案:

答案 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