相关疑难解决方法(0)

如何在rspec中编写Rails 3.1引擎控制器测试?

我编写了一个带有命名空间Posts的Rails 3.1引擎.因此,我的控制器可以在app/controllers/posts /中找到,我的模型可以在app/models/posts等中找到.我可以很好地测试模型.一个型号的规格看起来像......

module Posts
  describe Post do
    describe 'Associations' do
      it ...
      end
Run Code Online (Sandbox Code Playgroud)

......一切正常

但是,控制器的规格不起作用.Rails引擎安装在/ posts,但控制器是Posts :: PostController.因此,测试将控制器路由视为帖子/帖子.

  describe "GET index" do
    it "assigns all posts as @posts" do
      Posts::Post.stub(:all) { [mock_post] }
       get :index
       assigns(:posts).should eq([mock_post])
    end
  end
Run Code Online (Sandbox Code Playgroud)

产量......

  1) Posts::PostsController GET index assigns all posts as @posts
     Failure/Error: get :index
     ActionController::RoutingError:
     No route matches {:controller=>"posts/posts"}
     # ./spec/controllers/posts/posts_controller_spec.rb:16
Run Code Online (Sandbox Code Playgroud)

我已经在测试应用程序的路由文件...:命名空间等尝试了各种技巧,但无济于事.

我该如何工作?似乎它不会,因为引擎将控制器置于/ post,但命名空间将控制器置于/ posts/posts以进行测试.

rspec routes ruby-on-rails-3 ruby-on-rails-3.1

45
推荐指数
4
解决办法
9499
查看次数

在发出请求之前,Rspec 2.7访问控制器会话

我正在使用Rspec测试我的控制器,在向路径发出请求之前,我似乎无法设置当前控制器的会话变量.例如,这有效:

  describe "GET /controller/path" do
    it "if not matching CRSF should display message" do
      get controller_path

      request.session[:state] = "12334"
    end
  end
Run Code Online (Sandbox Code Playgroud)

这不起作用(我得到一个错误,说session不是Nil类的方法):

      describe "GET /controller/path" do
        it "if not matching CRSF should display message" do
          request.session[:state] = "12334"
          get controller_path
        end
      end
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

testing rspec ruby-on-rails rspec2

9
推荐指数
2
解决办法
9778
查看次数