어떻게 foobar() 메소드를 테스트 할 수 있도록 app 인스턴스에 액세스합니까?Sinatra 앱에서 메소드를 테스트하려면 어떻게해야합니까?
class App < Sinatra::Base
get '/' do
return foobar
end
def foobar
"hello world"
end
end
어떻게 foobar() 메소드를 테스트 할 수 있도록 app 인스턴스에 액세스합니까?Sinatra 앱에서 메소드를 테스트하려면 어떻게해야합니까?
class App < Sinatra::Base
get '/' do
return foobar
end
def foobar
"hello world"
end
end
그것은 당신이 테스트 중요하지 않습니다 - 그것은 얼마나 :) =>http://www.sinatrarb.com/testing.html
이 늦은 회신입니다,하지만 그것도 할 수있는 유연한 방법을 찾기 위해 노력하고있다.
Sinatra의 소스 코드 (1.4.5)에서 new!
으로 앱 인스턴스를 생성하면 앱의 메소드를 직접 테스트 할 수 있습니다. Test :: Unit 및 Shoulda를 사용하여 테스트 설정에서 테스트하십시오.
class AppTest < Test::Unit::TestCase
setup do
@app = App.new! # here is the point.
end
should 'say hello to the world' do
assert_equal "hello world", @app.foobar # or @app.send(:foobar) for private methods.
end
end
결과가 있습니다. new!
을 사용하면 entry point to the middleware pipeline and the app in normal settings이되는 일반적인 Sinatra::Wrapper
을 만들지 않습니다. 따라서 new!
접근법은 테스트 된 메소드가 미들웨어 기능 (예 : SSL)에 의존하지 않는 "도우미"인 경우에만 작동합니다. 또는 post on Rspec은 대안적인 해결책을 제안한다. 과거에는 비슷한 것을 사용 했었지만, 항상 최선의 선택이 아닌 더 많은 작업이 필요합니다. 테스트 할 코드의 범위를 넓히는 것이 장점이었습니다. new!
으로 앱을 격리하면 "단위 테스트"를 수행하는 것이 좋습니다.
@ 3 님의 의견에 유의하십시오 : 평범하지 않은 앱은 모든 도우미 등의 API 메소드 (일반적으로 앱에서)를 분리해야합니다. 별도의 파일로 끝나는 도우미는보다 깔끔하고 유지 보수가 쉽고 테스트하기 쉽습니다. 하지만 리팩토링이 필요하다는 인식하에 앱의 첫 번째 버전에 몇 명의 헬퍼가 포함되는 경우를 분명히 이해합니다. 그리고 테스트를 거치더라도 소프트웨어 자체와 향후 리팩토링에 대한 확신이 생깁니다.
왜 sinatra에서 메서드를 원하십니까? 보기를 사용하여 콘텐츠를 반환하십시오. 또는 도처에있는 도우미를 사용하십시오. 그러나 일반적으로 Sinatra에서는 메소드를 테스트하지 않습니다. – three
하지만 get 블록에서 사용하는 복잡한 방법이 있고이를 별도로 테스트하고 싶다면 어떻게해야합니까? – Lilly
외부에 클래스를 만들고 테스트 할 수 있습니다. – three