Ruby on rails 3.2 测试充当rspec的租户

Ruby on rails 3.2 测试充当rspec的租户,ruby-on-rails-3.2,rspec2,fabrication-gem,acts-as-tenant,Ruby On Rails 3.2,Rspec2,Fabrication Gem,Acts As Tenant,我有一个多租户应用程序,使用ascts_作为_租户。我正在尝试编写一个测试范围的规范。所以我想测试User.active的输出 一般来说,这可以很好地处理以下代码 it "returns a correct active user" do user_active = Fabricate(:user, curremp: true) user_scope2_active = Fabricate(:user, curremp: true) user_not_active = Fabrica

我有一个多租户应用程序,使用ascts_作为_租户。我正在尝试编写一个测试范围的规范。所以我想测试User.active的输出

一般来说,这可以很好地处理以下代码

it "returns a correct active user" do
  user_active = Fabricate(:user, curremp: true)
  user_scope2_active = Fabricate(:user, curremp: true)
  user_not_active = Fabricate(:user, account_id: user_active.account_id, curremp: false)
  expect(User.active).should include(user_active)
  #expect(User.active).to_not include(user_scope2_active)
  expect(User.active).to_not include(user_not_active) 
end
但是,我不知道如何让它使用acts_as_租户功能来使用当前的_租户,从而验证它只列出一个租户中的活动用户。我相信这已经做过了,但我还没有找到任何关于它的文档

因此,如何使用rspec测试acts as租户用户模型?

这就是我们要做的:

通常,您不需要在单元测试中处理将信息范围限定给租户的问题。所以只需编写这些测试,就好像没有范围界定一样

唯一的例外是,如果您想专门测试与作用域相关的内容。我们很少这样做。Acts_as_租户有自己的测试套件来测试作用域(但我会这么说,因为我写了它;)

如果必须在单元测试中处理AaT,则可以直接设置当前租户:

ActsAsTenant.current_tenant = Account.first

然后,在后过滤器中清除该租户(将其设置为nil)是很重要的,否则您将陷入调试地狱。

我发现,确保在租户出现问题时抛出正确的错误消息很有帮助,例如:

在(:每个)执行之前
ActsAsTenant.current_tenant=FactoryBot.create(:account)
结束
它“没有帐户无效”do
foo=FactoryBot.create(:foo)
期望{foo.account=nil}.引发_error actisasTenant::Errors::TenantIsImmutable
结束