PlayFramework - 使用json渲染运行功能测试

时间:2011-12-01 15:02:33

标签: java json playframework

我正在尝试运行此功能测试

    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

2 个答案:

答案 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测试。