Adobe ColdFusion 2016测试盒BDD elvis运营商问题
更新:为此问题提交了错误报告Adobe ColdFusion 2016测试盒BDD elvis运营商问题,coldfusion,bdd,coldfusion-2016,Coldfusion,Bdd,Coldfusion 2016,更新:为此问题提交了错误报告 您可以调用?:as elvis运算符/三元运算符/空共线性。在ACF中,关于该操作员的适当文档的实现和运气非常差。在TestBox(尝试了v2.3.0+00044和2.2.0+00021)BDD中使用它时存在一些问题。在这里,我创建了非常简单的测试包(aTest.cfc)来演示这个问题 component extends="testbox.system.BaseSpec"{ function run(){ describe( "checki
您可以调用?:as elvis运算符/三元运算符/空共线性。在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中运行这个测试用例时,没有问题。但是在AdobeColdFusion中,我得到了错误。请参阅随附的测试结果屏幕截图。
1.你们可以看到,在第一个规范中,转储是未定义的
expect(itemTypeConfig.someConfig?:“I am null”).toBe(1)代码>它给出的是未定义的实际值
itemTypeConfig={};
var actualResult=itemTypeConfig.someConfig?:“我为空”;
期望值(实际结果).toBe(1);
但它给出的实际结果是未定义的我试图在独立的cfm文件中创建类似的行为,但我无法复制它。我不确定这是testbox中的问题,还是ACF在闭包中处理elvis操作符。我不确定描述此问题的确切术语这是Adobe ColdFusion 2016版中的一个解析错误。(它在ColdFusion 11中工作)。我将您的示例简化为演示此问题的代码。只有将闭包调用嵌套到至少2个深度时,才会发生这种情况
clos = function( func ) { func(); };
clos( function(){
clos( function(){
writeDump( foo ?: "I am null" );
} );
} );
如您所报告的,输出为“未定义”,但预期为“我为空”
请去火车站买票。在修复之前,您将无法在BDD测试中使用elvis运算符
我建议简化您的问题,使用更小的复制案例。如果您尝试在每个
itemTypeConfig
定义之前添加var
,会怎么样。如下所示:var itemTypeConfig={}代码>。即使var与此上下文无关,我也已经尝试过了。非常感谢您的建议。您能将其简化为一行代码(或者3或4行代码)来单独显示问题吗?我认为这个问题有很多代码和解释,所以它被略过了,因为它需要花费很多时间来深入研究和理解。非常感谢你的简化示例来模拟我的问题&正如你提到的这个示例&我的测试套件在CF 11中运行良好,但在CF 2016中没有,我将在Adobe bug base中记录一个bug