在尝试编写测试时,我从Play中收到此警告:
您在范围内没有隐式应用程序。如果您想将当前运行的应用程序置于上下文中,请使用依赖注入。
我发现如果我添加了这个导入,它神奇地解决了范围内应用程序的问题:
import play.api.Play.current
然而它警告你
对象Play中的方法当前不推荐使用:这是对应用程序的静态引用,而是使用DI
如何使用依赖注入来获得相同的结果?这就是我需要的地方:
class TestSpec extends PlaySpec with OneAppPerSuite { ... }
修改:我确实找到了this post,但我看不出答案如何能为我提供一个获得隐式 Application
的线索
答案 0 :(得分:0)
我被指向this example(由@ insan-e),它显示了如何解决这个问题。您无法注入测试类,但您“只”需要使用以下内容覆盖gulp.task('defaultTheme', function () {
return gulp.src([
'./style/colors/*.less',
'./style/variables.less',
'./style/general.less'
])
.pipe(foreach(function(stream, file) {
return stream
.pipe(concat('theme-'+ file.name +'.css'))
}))
.pipe(less().on('error', function(err) {
gutil.log(err);
this.emit('end');
}))
.pipe(stripCssComments())
.pipe(gulpif(isLive, cleanCSS({compatibility: 'ie9'})))
.pipe(gulp.dest('./style/dist'))
});
:
PlaySpec
和测试:
import javax.inject.{Inject, Singleton}
import org.scalatestplus.play.{OneAppPerSuite, PlaySpec}
import play.api.Application
import play.api.inject.guice.GuiceApplicationBuilder
// To avoid repeating the `instanceCache` line below for each DAO
@Singleton
class DaoContext @Inject()(
val testDAO: TestDAO
// Other DAOs here
)
abstract class BetterSpec extends PlaySpec with OneAppPerSuite {
implicit override lazy val app = new GuiceApplicationBuilder().configure(...).build
protected def daoContext(implicit app: Application): DaoContext = {
Application.instanceCache[DaoContext].apply(app)
}
}
我知道,“到底是什么????”但它确实有效。
N.B。现在它可以作为Play Slick: How to inject DbConfigProvider in tests
的副本关闭