使用rspec测试acts_as_tenant

时间:2013-04-18 12:29:38

标签: ruby-on-rails-3.2 rspec2 fabrication-gem acts-as-tenant

我有一个使用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用户模型?

2 个答案:

答案 0 :(得分:5)

这就是我们的工作:

一般而言,您不需要在单元测试中处理向租户提供信息的范围。因此,只需编写这些测试,就好像没有确定范围一样。

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

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

ActsAsTenant.current_tenant = Account.first

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

答案 1 :(得分:0)

我发现确保在租户发生一些奇怪的事情时抛出正确的错误消息很有帮助,例如:

    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