Spec测试将表名称作为`module_name_table_name`

时间:2014-08-20 23:49:11

标签: ruby-on-rails rspec

我已经设置了一个Rails-api应用程序,其中有V1命名空间之外的用户。 Player代表API的用户。以前,当所有模型都在模块V1内时,一切都很顺利。现在当我运行测试时,我得到了:

    V1::PlayersController GET players returns all players
     Failure/Error: FactoryGirl.create :player, user_id: 1
     ActiveRecord::StatementInvalid:
       Could not find table 'v1_players'

这是一个常见错误吗?我唯一能想到的是我在迁移中犯了一个错误。它们是标准的,没有提到v1,所以我无法想象为什么ActiveRecord期待这个名字。

这是规范,如果有帮助:

describe V1::PlayersController, :type => :controller do 

    describe "GET players" do
        it "returns all players" do 
            FactoryGirl.create :player, user_id: 1
            FactoryGirl.create :player, user_id: 2

            get :index, :format => :json

            expect(response.status).to eq 200

            body = JSON.parse(response.body)
            player_user_ids = body.map { |m| m["user_id"] }

            expect(player_user_ids).to match_array(["1",
                                               "2"])
        end
    end
end

Player工厂:

FactoryGirl.define do
  factory :player, class: V1::Player do
    user_id 5
  end
end

感谢。

1 个答案:

答案 0 :(得分:0)

根据ActiveRecord文档,我认为这是预期的行为。我已经在表上运行迁移以遵守。我还了解到,您可以使用参数module_name :: class_name运行rails生成器,而不仅仅是类名。