Testing acts_as_tenant with rspec



我有一个多租户应用程序使用ascts_as_tenant。我正在尝试编写一个测试作用域的规范。所以我想测试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_tenant功能来使用current_tenant,从而验证它只列出来自一个租户的活动用户。我确信以前有人这样做过,但我还没有找到任何关于它的文档。

因此,我如何用rspec测试acts_as_tenant用户模型?

我们是这样做的:

一般来说,您不需要在单元测试中处理将信息限定为租户的问题。因此,只要编写这些测试,就好像没有作用域一样。

唯一的例外是如果您想要专门测试与范围相关的东西。我们很少这样做。Acts_as_tenant有自己的测试套件来测试作用域(但我要说,因为它是我写的;)。

如果必须在单元测试中处理AaT,可以直接设置current_tenant:

ActsAsTenant.current_tenant = Account.first

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

我发现它有助于确保在租户发生异常情况时抛出正确的错误消息,例如:

    before(:each) do
      ActsAsTenant.current_tenant = FactoryBot.create(:account)
    end
    it 'is not valid without an account' do
      foo = FactoryBot.create(:foo)
      expect { foo.account = nil }.to raise_error ActsAsTenant::Errors::TenantIsImmutable
    end

相关内容

  • 没有找到相关文章

最新更新