首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >元编程和引用

元编程和引用
EN

Stack Overflow用户
提问于 2021-10-08 21:01:04
回答 1查看 38关注 0票数 1

我正在尝试为我的模型中的作用域编写一个测试。

代码语言:javascript
运行
复制
 it "returns user that are manager" do
   user = FactoryBot.create(:user, manager: true)
   expect(User.is_manager(true)).to include(user)
 end
 it "returns user that are not manager" do
   user = FactoryBot.create(:user, manager: false)
   expect(User.is_manager(false)).to include(user)
 end

这真的很简单,但我有近20种方法

我想做的是更接近这个的东西。

代码语言:javascript
运行
复制
describe 'scopes' do
    [
      {name: :is_manager, column: :manager},
      {name: :is_foo, column: :foo},
      {name: :can_baz,  column: :baz}
    ].each do |scope|
      it "returns user that are #{scope[:column]}" do
        user = FactoryBot.create(:user, scope[:column] true) # this line is given me a prolem
        expect(User::Permission.send(scope[:name](true)).to include(user)
      end
   end
  end
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-09 07:59:43

对你来说,我可以这么做

代码语言:javascript
运行
复制
describe 'user scopes' do
    {
      :is_manager => [[true], {manager: true}],
      :is_foo => [[], {foo: true}],
      :not_foo => [[], {foo: false}],
      :by_name => [["%name%"], {name: "a name"}]
    }.each do |scope, (scope_args, model_args)|
      it "#{scope} should returns appropriate users" do
        user = FactoryBot.create(:user, **model_args)
        expect(User::Permission.send(scope, *scope_args)).to include(user)
      end
   end
  end

或者你可以改变

代码语言:javascript
运行
复制
{
 [:is_manager, [true]] => {manager: true}
}.each do |(scope, scope_args), model_args|
  # ...
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69501648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档