在为我的sinatra项目配置rspec后,我运行:rspec ./myApp_spec.rb
。但它并没有通过。规范日志如下:
- > rspec ./myApp_spec.rb
F Failures: 1) Main API should respond to GET Failure/Error: expect(response.status).to eq 200 NameError: undefined local variable or method `response' for #<RSpec::ExampleGroups::MainAPI:0x007f94d23cf938> # ./myApp_spec.rb:6:in `block (2 levels) in <top (required)>' Finished in 0.01261 seconds (files took 0.43698 seconds to load) 1 example, 1 failure Failed examples: rspec ./myApp_spec.rb:4 # Main API should respond to GET
这是我的spec_helper文件:
spec_helper.rb
require File.join(File.dirname(__FILE__), '..', 'myApp.rb')
require 'sinatra'
require 'rack/test'
set :environment, :test
set :run, false
set :raise_errors, true
set :logging, false
def app
Sinatra::Application
end
RSpec.configure do |config|
config.include Rack::Test::Methods
end
这是我的规范测试文件:myApp_spec.rb
require './spec_helper'
describe "Main API" do
it "should respond to GET" do
get '/'
expect(response.status).to eq 200
end
end
这是我的代码:https://gist.github.com/williamhqs/c127e5d7018aa61cb02a
修改
我在myApp_spec文件中将response.status
更改为last_response.status
,这似乎有效。但我得到的日志如下,404未找到。
response
和last_response
,它们之间的区别或位置是什么,响应是在rails_spec中?不确定。抱歉,这是我在ruby / rails / sinatra中的第一次测试。
故障:
1)主API应响应GET 失败/错误:期望(last_response.status).to eq(200)
expected: 200 got: 404 (compared using ==) # ./spec/myApp_spec.rb:8:in `block (2 levels) in <top (required)>'
完成0.01601秒(文件加载0.43771秒)1 例如,1次失败
失败的例子:
rspec ./spec/myApp_spec.rb:5#Main API应该响应GET
SLOUTION 1. sinatra只使用last_response,作为文档示例:http://www.sinatrarb.com/testing.html 2.更改应用方法
def app
@app=MyApp
#Sinatra::Application
end
希望帮助某人。
答案 0 :(得分:1)
我看到你已经回答了你自己的问题,但是在这里做到这一点很好(我可以添加一些东西)
从http://www.rubydoc.info/gems/rack-test/0.6.3开始,使用last_response
。
before do
# this is not part of the spec
# but a side effect that leads to the
# thing to be specced, so it goes in `before`
get page
end
subject {
last_response.body
}
it { should be_ok }
您可以将其包含在共享上下文中,并将page
作为本地var或let
传递。
我讨厌expect
语法,所以你可以自己解决这个问题!