【问题标题】:How to know the flow of the controller method using Rspec如何使用 Rspec 知道控制器方法的流程
【发布时间】:2019-03-20 02:44:34
【问题描述】:

我有两个相关的下拉菜单。一个给我组织名称,另一个下拉列表填充选择组织名称,即团队名称。
这是我的 github_leader_board_spec.rb

describe "github_leader_board" do
    before do
      @obj = DashboardsController.new
    end
    context "with session" do

      subject { get :github_leader_board, :params => { :orgname => "test", :teamname=> "team"}}
      it "returns http success" do
        expect(response).to have_http_status(:success)
      end
      it "executes other functions" do
        expect(@org_data).not_to be_nil
        expect(@obj.get_team_api("DevCenter")).not_to be_nil
      end
    end
  end

这是我的控制器方法

def github_leader_board
        myhash = {}
        @points_hash = {}
        member_data = []
        @org_data = get_org_api
        @orgs = get_names(org_data)
        team_data = get_team_api(params[:orgname])
        @teams = get_names(team_data)
        teamid = get_team_id(team_data)
        @teams.each_with_index {|k,i|myhash[k] = teamid[i]}
        myhash.each do |key,value|
            if key == params[:teamname]
                member_data = get_members("#{value}")
            end
        end
        @memberids = get_names(member_data)
        member_names = get_member_names(@memberids)
        review_comments = get_reviewcoments(@memberids)
        reactions = points(@memberids)
        points = [review_comments, reactions].transpose.map {|x| x.reduce(:+)}
        member_names.each_with_index {|k,i|@points_hash[k] = points[i]}

    end

如果我运行我的规范文件,它会显示未定义的@org_data。 github_leader_board 控制器内部的函数没有调用 get_org_api 并将值存储到 @org_data 变量。 任何人都可以建议代码有什么问题以及我该如何改进它。因为我是新手。 任何帮助,将不胜感激。 谢谢你。

【问题讨论】:

  • 查看prybyebug - Ruby 世界中著名的调试器。
  • 可能,您根本没有调用该操作。在it 块的第一行调用subject,然后检查expect(assigns(:org_data)).not_to be_nil。注意:您不能通过简单地在 RSpecs 中执行 @org_data 来访问控制器中设置的实例变量。使用assigns

标签: ruby-on-rails ruby rspec rspec-rails


【解决方案1】:

我相信您可以使用类型控制器的测试,而不是实例化您的控制器,然后使用 RSpec 方法 assigns (docs) 来测试您的实例变量,如下所示:

RSpec.describe DashboardsController, :type => :controller do
   context "with session" do
      # ...
      it "executes other functions" do
        expect(assigns(:org_data)).not_to be_nil
      end
    end
end

https://relishapp.com/rspec/rspec-rails/docs/controller-specs

此外,如果您想检查流程并调试代码,您可以使用 @Marek Lipka 所述的 gems prypry-railspry-nav

【讨论】:

  • DashboardsController github_leader_board with session 检查变量 Failure/Error: expect(assigns(:org_data)).not_to be_nil expected: not nil got: nil 这是我得到的错误
  • @AshwiniRamesh 您需要更改 describe 行以传递您的实际控制器类而不是字符串,这就是 rspec 知道它是“控制器规范”的方式
猜你喜欢
  • 2012-04-20
  • 1970-01-01
  • 1970-01-01
  • 2013-07-28
  • 2011-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-05
相关资源
最近更新 更多