如何使用 Rspec 了解控制器方法的流程
How to know the flow of the controller method using Rspec
我有两个依赖下拉菜单 down.One 给我组织名称,其他下拉菜单在选择组织名称时填充,即团队名称。
这是我的 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 变量。
任何人都可以建议代码有什么问题以及我该如何改进它。因为我是 ror 的新手。
任何帮助,将不胜感激。
谢谢你。
我相信你可以使用类型控制器的测试,而不是实例化你的控制器,然后使用 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
此外,如果您想检查流程并调试您的代码,您可以使用 gem pry
、pry-rails
和 pry-nav
,如@Marek Lipka 所述。
我有两个依赖下拉菜单 down.One 给我组织名称,其他下拉菜单在选择组织名称时填充,即团队名称。
这是我的 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 变量。 任何人都可以建议代码有什么问题以及我该如何改进它。因为我是 ror 的新手。 任何帮助,将不胜感激。 谢谢你。
我相信你可以使用类型控制器的测试,而不是实例化你的控制器,然后使用 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
此外,如果您想检查流程并调试您的代码,您可以使用 gem pry
、pry-rails
和 pry-nav
,如@Marek Lipka 所述。