2017-06-03 61 views
0

我已經針對角度2應用程序編寫了一些量角器測試。它們都駐留在同一個存儲庫(應用程序和測試)中。我需要在本地主機上運行應用程序(npm start),然後才能運行這些測試。最好的方法來實現這個目標是什麼?在e-2-e測試之前運行角度應用程序

回答

2

有許多構建工具可以實現這一目標(例如,GruntGulp等)。就個人而言,我喜歡使用npm scripts,因爲它們很簡單,並且已經是您項目的一部分。例如,在你的package.json,您可以添加類似:

"scripts": { 
    "pretest": "npm install", 
    "test": "protractor conf.js" 
    }, 

,然後如果你通過npm test運行測試,npm install應該得到你的測試運行之前運行。

+0

如果你啓動'npm test',它不會工作,因爲你的localhost應用程序沒有啓動,有沒有辦法啓動應用程序,然後運行量角器然後停止應用程序? –

+0

你可以通過指定jar [在你的配置](https://github.com/angular/protractor/blob/master/lib/config.ts)來讓Protractor自動啓動/停止Selenium。 – Brine

+0

噢......你說的是_app _...,當然,你可以添加一個npm腳本來啓動你的應用程序。閱讀[npm腳本文檔](https://docs.npmjs.com/misc/scripts),他們很容易遵循。 – Brine

1

除了@Brine他的回答,這是我爲我正在開發的Angular 2項目所做的。我需要啓動服務器才能運行我的測試。

我創建了一個.js文件,將

  • 在端口5555
  • 運行量角器測試,如果你需要傳遞參數,你可以在運行量角器之前啓動角的應用程序,但它沒有添加在這個腳本
  • 我使用NPM腳本運行量角器,但您可以添加任何你想要的const child = child_process.exec('npm run e2e.local');部分

// The server.js file 
 
const express = require('express'); 
 
const path = require('path'); 
 
const app = express(); 
 
const child_process = require('child_process'); 
 

 
const e2e = path.resolve(process.cwd(), './e2e-tests/config/'); 
 
const port = 5555; 
 
const appFolder = path.resolve(process.cwd(), './dist/your-app-folder/'); 
 

 
/** 
 
    * Start a server 
 
    */ 
 
class Protractor { 
 
    server(port, dir) { 
 
    app.set('port', port); 
 
    // Pass the folder the app should be run from 
 
    app.use(express.static(dir)); 
 

 
    return new Promise((resolve) => { 
 
     let server = app.listen(port,() => { 
 
     resolve(server); 
 
     }); 
 
    }); 
 
    } 
 
} 
 

 
/** 
 
* Start a server and run protractor. 
 
*/ 
 
(() => { 
 
    process.env.LANG = 'en_US.UTF-8'; 
 
    // I'm having some npm scripts that run the protractor config 
 
    const child = child_process.exec('npm run e2e.local'); 
 
    new Protractor() 
 
    // Start the server on port 5555 
 
    .server(port, appFolder) 
 
    .then((server) => { 
 
     // Start protractor 
 
     child.stdout.pipe(process.stdout); 
 
     child.stderr.pipe(process.stderr); 
 
     // Stop the server if Protractor crashes or we're done testing 
 
     child.on('exit',() => { 
 
     server.close(); 
 
     }); 
 
    }); 
 
})();

我希望這可以幫助你。