我编写了一个带有命名空间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测试我的控制器,在向路径发出请求之前,我似乎无法设置当前控制器的会话变量.例如,这有效:
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)
有任何想法吗?