我正在尝试运行此功能测试
public class JsonRenderTest extends FunctionalTest {
@Before
public void setup() {
Fixtures.deleteDatabase();
Fixtures.loadModels("data.yml");
}
@Test
public void testThatJsonRenderingWorks() {
Response response = GET("/recipe/1");
assertIsOk(response);
}
}
接听此电话的动作是
public static void showRecipe(Long id){
Recipe recipe = Recipe.findById(id);
notFoundIfNull(recipe);
renderJSON(recipe);
}
当我在http://localhost:8080/@tests使用TestRunner在firefox中运行测试时 我收到此错误消息:
失败,预期的响应状态:< 200>但是:< 404>
现在,如果我在浏览器中运行此URL http://localhost:8080/recipe/1,我会得到json的响应,我期待这是我的配方对象的json表示。
数据库中当然有一个id为1的配方。
现在这是我的问题。为什么浏览器没有时测试失败。我在Chrome,IE和FF中尝试了相同的结果。
任何指针都会非常感激。 感谢
-Alain
答案 0 :(得分:1)
谢谢eveyone。 好的,我找到了答案。 在夹具数据完全加载之前,我的测试似乎正在运行。 我正在针对本地MySql数据库运行我的测试。 当我取消通话时
Fixtures.deleteDatabase();
测试运行正常。
要解决此问题,我现在正在app.conf文件
中对mem数据库运行我的测试%test.db.url=jdbc:h2:mem:play;MODE=MYSQL;LOCK_MODE=0
答案 1 :(得分:0)
您可以使用辅助方法向请求添加内容类型
public Request jsonRequest(Request request) {
request.contentType = "application/json";
request.format = "json";
return request;
}
然后你的测试成为
@Test
public void testThatJsonRenderingWorks() {
Response response = GET(jsonRequest(newRequest)), "/recipe/1");
assertIsOk(response);
}
}
你也可以让WS类进行真正的http测试。