Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何重用跨多个控制器规格使用的测试双精度_Ruby On Rails_Rspec2 - Fatal编程技术网

Ruby on rails 如何重用跨多个控制器规格使用的测试双精度

Ruby on rails 如何重用跨多个控制器规格使用的测试双精度,ruby-on-rails,rspec2,Ruby On Rails,Rspec2,我有一个使用AuthLogic的Rails应用程序,并且已经达到了使用testdouble来为当前用户介入的程度。当前_用户有一组有限的状态,在许多控制器规范中重复使用 继续本例,想象控制器在每个上下文中具有类似的双重设置。你可以看到有很多重复的代码。你喜欢用什么方法来涂抹干燥剂 控制器规格rb require 'spec_helper' describe Controller1 do describe "GET 'index'" do context "when user h

我有一个使用AuthLogic的Rails应用程序,并且已经达到了使用testdouble来为当前用户介入的程度。当前_用户有一组有限的状态,在许多控制器规范中重复使用

继续本例,想象控制器在每个上下文中具有类似的双重设置。你可以看到有很多重复的代码。你喜欢用什么方法来涂抹干燥剂

控制器规格rb

require 'spec_helper'

describe Controller1 do

  describe "GET 'index'" do

    context "when user has state A" do
      before(:each) do
        user = double("User")
        user.stub(:state).and_return("A")
        user_session = double("UserSession")
        user_session.stub(:user).and_return(user)
        UserSession.stub(:find).and_return(user_session)
      end

      it "should test something for users with State A" do
        get :index
      end

      it "should test something else for users with State A" do
        get :index
      end
    end

    context "when user has state B" do
      before(:each) do
        user = double("User")
        user.stub(:state).and_return("B")
        user_session = double("UserSession")
        user_session.stub(:user).and_return(user)
        UserSession.stub(:find).and_return(user_session)
      end

      it "should test something for users with State B" do
        get :index
      end

      it "should test something else for users with State B" do
        get :index
      end
    end
  end
end

是将助手方法添加到spec\u helper的最佳方法,还是有更好的做法,例如?

将设置代码移动到spec\u helper.rb或spec/support/{something}.rb文件中定义的助手方法

def userInAStateWithSession
  user = double("User")
  user.stub(:state).and_return("A")
  user_session = double("UserSession")
  user_session.stub(:user).and_return(user)
  UserSession.stub(:find).and_return(user_session)
  return user
end
-


将设置代码移动到spec_helper.rb或spec/support/{something}.rb文件中定义的helper方法

def userInAStateWithSession
  user = double("User")
  user.stub(:state).and_return("A")
  user_session = double("UserSession")
  user_session.stub(:user).and_return(user)
  UserSession.stub(:find).and_return(user_session)
  return user
end
-