【发布时间】:2022-01-27 14:17:20
【问题描述】:
希望有人可以帮助我提供一些基本的 Sinatra 测试帮助...
我有一个玩具 sinatra 应用程序,它实现了这个基本端点,它调用了一个同名的方法:
get '/hello' do
hello
end
def hello
"hello"
end
然后我有这 3 个规格。第一次和第三次通过,但第二次失败:
context 'get /hello' do
let(:app) { App.new! }
it 'responds to hello' do
expect(app).to respond_to :hello
end
it 'calls hello' do
expect(app).to receive(:hello)
get '/hello'
end
it 'returns hello' do
let(:response) { get '/hello' }
expect(response.status).to eq 200
expect(response.body).to eq "hello"
end
end
没有被调用的错误:
expected: 1 time with any arguments
received: 0 times with any arguments
第一个规范证明该方法存在,第三个规范证明它实际上是根据 rspec 调用该方法。我不确定要使第二个规范正常工作我缺少什么
【问题讨论】:
-
我怀疑你的主题是错误的。什么是将消息发送到app?它可能不是您规范中的 App 实例。
-
我正在使用Rack::Test::Methods,所以在“获取”时,它会调用将其发送到应用程序。为了记住事情,我也开始使用
let(:app) { App.new! },因此这个上下文只有一个 App 实例,但仍然没有变化。 -
我怀疑这不起作用的原因是当Sinatra handles a request it
dups itself 时,一个新的实例负责每个请求。被模拟的app实例与实际调用方法的实例不同。
标签: ruby api testing rspec sinatra