我使用的是playframe 2.6和play-slick 0.8.0。
行动代码:
def addCompany = Authenticated {
DBAction(parse.json) {
implicit rs => {
val newCompany = rs.request.body
val result = CompanyTable.insert(newCompany.as[Company])(rs.dbSession)
if(result > 0)
Ok("{\"id\":"+result+"}")
else
Ok("New company was not created.")
}
}
}
Action是只检查有效会话的Action和DBAction的组合,DBAction要求请求主体具有有效的JSON对象。
测试代码:
"should create a Company from a Json request" in new InMemoryDB {
val newCompany = Company(name = "New Company1")
val fr = FakeRequest(POST, "/company")
.withSession(("email", "bob@villa.com"))
.withHeaders(CONTENT_TYPE -> "application/json")
.withJsonBody(Json.toJson(newCompany))
val action = controllers.CompanyController.addCompany
val result = action(fr).run
status(result) should be_==(OK)
(contentAsJson(result) \ "id").as[Long] should be_>(1L)
}
InMemoryDB类只是一个带有预填充内存数据库的伪造应用程序。
我遇到的问题是,当测试运行时,结果总是400,其中主体内容包含一条消息[无效的Json]。当我使用带有相同JSON正文内容的curl调用服务时,它会工作,并返回id。
我决定构建一个单独的测试项目,并使用activator为新项目创建种子。我注意到在生成的测试中使用了不同的调用操作的方法,因此我将我的项目切换为使用此方法。它奏效了,但我不知道为什么。
新代码:
"should create a Company from a Json request" in new InMemoryDB {
val newCompany = Company(name = "New Company1")
val action = route(
FakeRequest(POST, "/company")
.withSession(("email", "bob@villa.com"))
.withHeaders(CONTENT_TYPE -> "application/json")
.withJsonBody(Json.toJson(newCompany))
).get
status(action) should be_==(OK)
(contentAsJson(action) \ "id").as[Long] should be_>(1L)
}
正如您所看到的,它使用调用路由,而不是调用控制器。
问题内容: 我正在尝试创建控制器操作,该操作将根据参数返回JSON或部分html。使结果异步返回到MVC页面的最佳方法是什么? 问题答案: 在您的操作方法中,返回Json(object)以将JSON返回到您的页面。 然后只需使用Ajax调用action方法即可。您可以使用ViewPage中的一种辅助方法,例如 SomeMethod将是一个javascript方法,然后评估返回的Json对象。 如果
我一辈子都搞不懂这件事。我需要第二双眼睛。。。或者更好的大脑。我正在尝试让这个“Hello Triangle”python示例正常工作。我一直在翻译c教程中的内容。然而,无论我做什么,我总是会遇到这个错误。 我的代码如下。我在Mac上运行,所以你会注意到其中有些东西可能不是PC所需要的。在glDrawArrays出现之前,一切都正常。我知道C版openGL与使用pyOpenGL的python之间的
在“普通的”MongoDB中,对DB执行写入操作的方法(如.insertone()或.deleteOne())将分别返回或。这些对象将返回的布尔值和(如果适用)。这允许我们确保写操作成功。 但是,通俗地说,返回的是void: MongoOperations.Class 那么问题是,我们如何检索得到的和对象? 正在使用pom依赖项
我正试图在Rails中通过服务器发送事件来实现流媒体直播。我有一个Rake任务,用于监听文件更改,从而将记录添加到数据库中。一旦添加,我想发送一个SSE到前端。 但是,模型不能将事件发送到前端,这是由控制器负责的。如何告诉我的控制器向数据库中添加了新记录? 到目前为止,我的(坏的)解决方案是:在模型中使用EventBus,在保存后回调,宣布更改并要求控制器侦听以下消息: 我认为我的请求在收到事件之
为什么我不能在这里回复一个糟糕的请求?在其他例子中,它工作得很好。
英文原文:http://emberjs.com/guides/testing/testing-controllers/ 单元测试方案和计算属性与之前单元测试基础中说明的相同,因为Ember.Controller集成自Ember.Object。 针对控制器的单元测试使用ember-qunit框架的moduleFor来做使这一切变得非常简单。 测试控制器操作 下面给出一个PostsController