我遇到这样的错误:
Failure/Error: let(:slide) { build :slide }
ActiveRecord::StatementInvalid:
PG::UndefinedTable: ERROR: relation "albums" does not exist at character 13
: INSERT INTO "albums" ("created_at", "name", "updated_at", "user_id") VALUES ($1, $2, $3, $4) RETURNING "id"
以某种随机方式 - 有时所有传递成功,有时其中一些没有。我通常会进行同样的测试,但是当我只运行它们时,我无法重现这个问题。
当我开始使用gem devise
和gem apartment
进行多租户时,我刚刚转移到Postgres,这对于模式最有效。从那时起,我添加了我的测试around
钩子来模拟用户登录:
given(:user) { create :user }
around :each do |scenario|
login_and_switch_schema user
scenario.run
destroy_users_schema user
destroy_user user
end
以上所有助手均在 spec / support / auth_helpers.rb 中定义。
我不确定还有什么是重要的,所以我只是提交了github here。
我正在测试它:
rake db:test:prepare && rspec -X ./spec/models/ ./spec/controllers/ ./spec/features/
(关闭spork
没有帮助。)
有什么想法吗?我觉得头晕目眩,不知道该怎么做。提前谢谢。
更新
在将每个spec文件的around
挂钩更改为:
before(:all) do
@user = create :user
end
after(:all) do
destroy_users_schema @user
destroy_user @user
end
before(:each) do
login_and_switch_schema @user
end
同时它的工作速度是原来的两倍。无论如何,这更像是一种解决方法,因为根本原因仍然让我感到困惑。