我使用mongodb作为我的主数据库,所以在我的集成测试中,我尝试测试我的系统是否按预期处理数据。过程如下:
我使用behat作为我的BDD测试工具,并在我的FeatureContext上实现插入和读取集合中的数据,如下所示:
鉴于我有关于集合品牌的以下数据
[
{
"_id": "575df0b00419c905492d0461",
"name": "Adidas",
"image": "adidas.png"
}
]
然后我验证集合品牌
上存在以下数据[
{
"_id": "575df0b00419c905492d0461",
"name": "Adidas",
"image": "adidas.png"
}
]
/**
* @Given I have the following data on collection :collectionName
* @param string $collectionName
* @param PyStringNode $collectionData
* @throws Exception
*/
public function iHaveTheFollowingDataOnCollection($collectionName, PyStringNode $collectionData)
{
$data = json_decode($collectionData->getRaw(), true);
foreach ($data as $index => $element) {
foreach ($element as $key => $value) {
if ($key === '_id') {
$data[$index][$key] = new \MongoDB\BSON\ObjectID($value);
}
if (strpos($key, "@") !== false) {
$key = explode("@", $key)[1];
$data[$index][$key] = array(
"\$ref" => $value["\$ref"],
"\$id" => new \MongoDB\BSON\ObjectID($value["\$id"]),
"\$db" => $value["\$db"],
);
}
if ($value === "UNIX_TIME()") {
$data[$index][$key] = time();
}
}
}
$collection = $this->db->$collectionName;
foreach ($data as $document) {
$collection->insertOne($document);
}
}
问题是我在不同的功能上至少有1k种不同的场景,并且由于在收集时没有找到预期的数据,因此大量使用测试会随机失败。
我首先想到的是数据的插入和可用性存在一些延迟。
有什么想法以及如何解决它?