2014-06-18 33 views
1

我需要類似摩卡的only方法是否可以在CasperJS中只運行一個特定的測試?

it.only "should test something" 

對於那些誰不知道它的東西意味着摩卡將推出所有,如果我不會寫only

將要推出的測試中只有這一個測試

在CasperJS中可以做類似嗎?現在,我使用的是惱人的「註釋/取消註釋」技術

+0

你叫什麼_one test_?一個文件/場景,一個步驟?一個斷言?你想過濾一些斷言? – Fanch

+0

@Fanch我想它被稱爲場景。即'casper.test.begin' –

回答

0

你可以使用參數選項:casperjs test scriptName.js --only=true

而在你casperjs文件:

if (casper.cli.get("only")){var only=true;} 
else {var only=false;} 

然後在你想要的斷言:

if (!only){ test.assertExists(....);} 
else {"should test something"} 

你可以用類似的方法做相反的處理。

編輯:

如果它是你可以使用casperjs setUp()功能和調用另一個函數(),它過濾的情況下,使用命令選項和casper.test.done(),像這樣的場景:

var setLevel = function(level){ 
    if(casper.cli.get("mode") !== level){ 
     casper.test.done(); 
    } 
}; 


casper.test.begin('\n***** Scenario : *****',{ 
setUp: function(test) { 
    setLevel("only"); 
}, 

test: function(test){ 
    "use strict"; 
    casper.start() 
    .run(function() { 
      this.test.comment('--- Done ---\n'); 
      test.done(); 
    }); 
} 
}); 

因此,如果您使用casperjs test path/to/folder --mode="only"調用它,它將立即關閉每個場景,其中級別未設置爲而只有。但是,如果您不想看到它們,它會輸出打開日誌,但在casper.test.begin()之前使用casper.test.setUp()方法。是的,在調用begin()之前完成測試是很奇怪的,但是如果我記得它確實有效。

這也是一個醜陋的黑客,但對我來說這是一個解決方案。問題是:有必要在每個文件中使用setUp()setLevel()。無論如何,沒有原生的選擇。

+0

這是醜陋的黑客,而不是解決方案 –

+0

請參閱編輯更好的醜陋的黑客:) – Fanch

0

創建自己的兩個函數,包裝casper.test.begin並使用它們。您將需要第三功能實際上是調度測試(猴修補版本看到跳轉下文):

var testcase = (function(casper){ 
    var scenarios = [], 
     onlySet = false; 
    return { 
     it: function(){ 
      if (!onlySet) { 
       scenarios.push(arguments); 
      } 
     }, 
     itOnly: function(){ 
      onlySet = true; 
      scenarios = [arguments]; 
     }, 
     build: function(){ 
      scenarios.forEach(function(scenario){ 
       casper.test.begin.apply(casper.test, scenario); 
      }); 
     } 
    }; 
})(casper); 

然後你可以寫你的情況下以這樣的方式

testcase.it("something", function suite(test){ 
    test.assert(true); 
}); 

testcase.itOnly("something2", function suite(test){ 
    test.assert(true); 
}); 

testcase.it("something3", function suite(test){ 
    test.assert(true); 
}); 

testcase.build(); 

輸出將是:

# something2 
PASS Subject is strictly true 

當然你可以猴子修補casper.test實例帶你的功能:

(function(casper){ 
    // IIFE to avoid leaking scenarios 
    var scenarios = [], 
     onlySet = false, 
     oldBegin = casper.test.begin; 
    casper.test.begin = function(){ 
     if (!onlySet) { 
      scenarios.push(arguments); 
     } 
    }; 
    casper.test.beginOnly = function(){ 
     onlySet = true; 
     scenarios = [arguments]; 
    }; 
    casper.test.build = function(){ 
     scenarios.forEach(function(scenario){ 
      oldBegin.apply(casper.test, scenario); 
     }); 
    }; 
})(casper); 

casper.test.begin("something", function suite(test){ 
    test.assert(true); 
}); 

casper.test.beginOnly("something2", function suite(test){ 
    test.assert(true); 
}); 

casper.test.begin("something3", function suite(test){ 
    test.assert(true); 
}); 

casper.test.build(); 
相關問題