当有人通过URL发送查询时,我正在编写一个规范来测试mashup_controller的行为。我需要模拟URL中包含的参数,我读到post()方法会这样做,但是当我收到错误时:
1) MashupController simulates query
Failure/Error: post :create
NoMethodError:
undefined method `post' for
#<RSpec::Core::ExampleGroup::Nested_1:0x980bc50>
# ./mashup_controller_rspec.rb:9:in `block (2 levels) in <top (required)>'
Finished in 0.20199 seconds 1 example, 1 failure
Failed examples:
rspec ./mashup_controller_rspec.rb:7 # MashupController simulates query
这是我的代码:
require 'spec_helper'
require 'mashup_controller.rb'
describe MashupController do
it "simulates query" do
post :create
end
end
对不起,如果我没有任何意义。我对rails和rspec很新。任何帮助,将不胜感激。感谢。
答案 0 :(得分:31)
如果规范文件不在spec/controllers
下,则get
不会自动提供post
和rspec-rails
等方法。
您需要标记规范:
describe MyController, type: :controller do
# ...
end
或包含模块:
describe MyController do
include RSpec::Rails::ControllerExampleGroup
# ...
end
答案 1 :(得分:3)
gem spec-rails
mashup_controller_rspec.rb
应位于spec/controllers
答案 2 :(得分:1)
我使用 gem rspec-rails 而不是gem spec-rails。
答案 3 :(得分:1)
在Rails 4中,您可以将RSpec测试的类型声明为:request
,并且spec文件可以位于任何目录中。
example: in spec/routes/users.rb
RSpec.describe 'UserRoutes', type: :request do
...
end
答案 4 :(得分:0)
我的解决方案是
describe MyController, type: :controller
...
end