【发布时间】:2021-03-03 23:10:12
【问题描述】:
希望其他人和我有同样的问题,或者有其他想法。
我目前正在运行 Play 1.4.x(不是选择),但也在努力升级到 Play 1.5.x,尽管我证实两个版本都发生了同样的问题。 我创建了一个简单的功能测试,通过夹具加载数据
我的加载测试数据的夹具是这样的
data.yml
User(testUser):
name: blah
AccessToken(accessToken):
user: testUser
token: foo
Data(testData):
user: testUser
...
我创建了一个控制器来处理这样的数据,它具有用于身份验证检查的中间件。路由文件会将/foo 之类的内容映射到BasicController.test
public class BasicController extends Controller{
@Before
public void doAuth(){
String token = "foo"; // Get token somehow from header
AccessToken token = AccessToken.find("token = ?", token).first(); // returns null;
// do something with the token
if(token == null){
//return 401
}
//continue to test()
}
public void test(){
User user = //assured to be logged-in user
... // other stuff not important
}
}
最后我的功能测试是这样的:
public class BasicControllerTest extends FunctionalTest{
@org.junit.Before
public void loadFixtures(){
Fixtures.loadModels("data.yml");
}
@Test
public void doTest(){
Http.Request request = newRequest()
request.headers.put(...); // Add auth token to header
Http.Response response = GET(request, "/foo");
assertIsOk(response);
}
}
现在,我遇到的问题是,我可以验证令牌在标头中仍然可见,但运行 AccessToken token = AccessToken.find("token = ?", token).first(); 返回 null
我在功能测试中验证,在调用GET 方法之前,通过加载夹具成功创建了accessToken 和用户。通过在 1.5.x 中播放新的 DBBrowser 插件,我可以看到我的 H2 内存数据库中的数据。但是由于某种原因,控制器方法中没有返回数据。
我尝试过的事情
- 确保仅加载一次固定装置,因此不会出现在读取数据时清除数据的竞争条件。
- 使用多种方式查询数据库,通过
nativeQueryjpql/hql query language和通过播放原生方式查询数据。 - 测试不同版本的 play
任何帮助将不胜感激!
【问题讨论】:
标签: java playframework playframework-1.x