更新:提交bug报告针对此问题,Bug #4150051Adobe ColdFusion,请2016 TESTBOX BDD猫王操作问题
你可以称之为:如猫王运营商/三元运算/空coelscing。这是非常糟糕的实施&在ACF有关此操作员的适当文档的运气。在TestBox中使用它时出现了一些问题(尝试了v2.3.0 + 00044 & 2.2.0 + 00021)BDD。在这里我创建了非常简单的测试包(aTest.cfc)来演示这个问题。
component extends="testbox.system.BaseSpec"{
function run(){
describe("checking the ACF issues in ternary operaors", function(){
it("Just dump, it will pass. But see the dump above", function(){
itemTypeConfig = {};
writeDump(itemTypeConfig.someConfig ?: "I am null");
itemTypeConfig = {"someConfig":"abcd"};
writeDump(itemTypeConfig.someConfig ?: "I am null");
});
it("Check with elvis operator inside expect", function(){
itemTypeConfig = {};
expect(itemTypeConfig.someConfig ?: "I am null").toBe(1);
itemTypeConfig = {"someConfig":"abcd"};
expect(itemTypeConfig.someConfig ?: "I am null").toBe(1);
});
it("Check with expect with some temp variable", function(){
itemTypeConfig = {};
var actualResult = itemTypeConfig.someConfig ?: "I am null";
expect(actualResult).toBe(1);
itemTypeConfig = {"someConfig":"abcd"};
var actualResult = itemTypeConfig.someConfig ?: "I am null";
expect(actualResult).toBe("abcd");
});
it("Check with expect with struct key exists", function(){
itemTypeConfig = {};
if (structkeyexists(itemTypeConfig, "someConfig"))
var actualResult = itemTypeConfig.someConfig;
else
var actualResult = 1;
expect(actualResult).toBe(1);
itemTypeConfig = {"someConfig":"abcd"};
if (structkeyexists(itemTypeConfig, "someConfig"))
var actualResult = itemTypeConfig.someConfig;
else
var actualResult = 1;
expect(actualResult).toBe("abcd");
});
});
}
}
在Lucee中运行此测试用例时,没有任何问题。但在Adobe ColdFusion中,我遇到了错误。请参阅测试结果的屏幕截图。 1.您可以看到转储在第一个规格中未定义。
在第二天赋,如果你给猫王运营商内部的期望,
expect(itemTypeConfig.someConfig ?: "I am null").toBe(1);
这是给实际的不确定在第三个规格,我想使用临时变量作为变通方法来解决实际未定义问题规范2
itemTypeConfig = {}; var actualResult = itemTypeConfig.someConfig ?: "I am null"; expect(actualResult).toBe(1);
但它给actualResult是不确定的在第四规范,我使用同列struckkeyexists使用这个三元运算符BDD测试套件&它工作正常。
我试图在独立的cfm文件中创建类似的行为,但我无法重现它。我不确定,无论是在测试箱中发布问题还是可能是ACF处理关闭中的elvis操作员。我不确定描述此问题的确切术语
如果在每个'itemTypeConfig'定义之前尝试添加'var'会怎么样?像这样:'var itemTypeConfig = {};'。 – Pankaj
即使var与这个上下文无关,我也已经尝试过了。非常感谢您的建议 –
您是否可以将它缩减为单独一行代码(或者可能是3或4),以单独显示问题?我认为这个问题只是有很多代码和解释,所以它会被剔除,因为需要花费大量的时间来挖掘和理解这一切。 –