更新:提交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),以單獨顯示問題?我認爲這個問題只是有很多代碼和解釋,所以它會被剔除,因爲需要花費大量的時間來挖掘和理解這一切。 –