2013-10-08 61 views
2

我一直在爲常量「require is not defined」錯誤設置NodeJS + Backbone應用程序的測試框架時遇到困難。我終於使用瀏覽器內測試框架來工作,該框架提取了我需要的所有依賴項並運行test.js文件。使用摩卡測試NodeJS - 「需求未定義」

目前,我只對我的Backbone模型,視圖和集合進行基本測試。現在,我想添加API測試,但是我回到了「require is not defined」錯誤。這是什麼造成的?很顯然,我在這裏錯過了一些基本的東西。我只想補充:

var request = require('supertest') 
    , express = require('express'); 

var app = express(); 

片段test.js的:

describe('Application', function(){ 
    it("creates a global variable for the namespace", function() { 
    should.exist(App); 
    }) 
}); 


describe('Models', function() { 

    describe('SearchFormModel', function() { 
     beforeEach(function() { 
      this.SearchFormModel = new App.Model.SearchFormModel(); 
      this.defaultFields = this.SearchFormModel.attributes; 
     }) 

     it("created a SearchFormModel", function() { 
      should.exist(this.SearchFormModel); 
     }) 

     it("should have 7 default fields", function() { 
      Object.keys(this.SearchFormModel).length.should.equal(7); 
     }) 

     it("should default all fields to empty string", function() { 
      for (var key in this.defaultFields) { 
       this.defaultFields[key].should.equal(""); 
      } 
     }) 
    }); 

}); 

測試runner.html:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <!-- Title &amp; Meta --> 
    <title>Frontend tests</title> 
    <meta charset="utf-8"> 

    <!-- Stylesheets --> 
    <link rel="stylesheet" href="../node_modules/mocha/mocha.css"> 
</head> 

<body> 

    <div id="mocha"></div> 

    <!-- Testing Libraries --> 
    <script src="../node_modules/mocha/mocha.js"></script> 
    <script src="../node_modules/chai/chai.js"></script> 
    <script> 
     // Use the expect version of chai assertions - http://chaijs.com/api/bdd 
     var should = chai.should(); 

     // Tell mocha we want TDD syntax 
     mocha.setup('tdd'); 
    </script> 

    <!-- Libs --> 
    <script src="../public/lib/jquery-1.8.2.min.js"></script> 
    <script src="../public/lib/underscore-min.js"></script> 
    <script src="../public/lib/backbone-min.js"></script> 
    <script src="../public/lib/bootstrap.min.js"></script> 
    <script src="../public/lib/highcharts.js"></script> 
    <script src="../public/lib/bootstrap-datepicker.js"></script> 
    <script src="../public/js/modules/exporting.js"></script> 

    <!-- Source files --> 
    <script src="../public/js/namespace.js"></script> 
    <script src="../public/js/jst.js"></script>    
    <script src="../public/js/utils.js"></script> 
    <script src="../public/js/models/models.js"></script> 
    <script src="../public/js/models/search.js"></script> 
    <script src="../public/js/models/plot.js"></script> 
    <script src="../public/js/models/search_result.js"></script> 
    <script src="../public/js/views/header.js"></script> 
    <script src="../public/js/views/plot.js"></script> 
    <script src="../public/js/views/list.js"></script> 
    <script src="../public/js/views/search.js"></script> 
    <script src="../public/js/router.js"></script> 
    <script src="../public/js/app.js"></script>  

    <!-- Test --> 
    <script src="test.js"></script> 

    <script> 
     mocha.run(); 
    </script> 

</body> 
</html> 

回答

3

require和CommonJS的只適用於節點.js

I如果你運行瀏覽器測試,那麼你需要編寫它,就像你將在瀏覽器中運行它一樣。還要注意單元測試應該單獨進行,你不需要加載你的應用服務器(快速)來運行你的測試。

我想指出一個簡單的解決方案,但這裏有太多的選擇。基本上,你應該通過加載一個html文件來開始在瀏覽器中運行瀏覽器測試。

然後,您需要將其自動化並從終端運行瀏覽器測試。那時候你想在PhantomJs中運行測試,並在終端上輸出瀏覽器結果。圍繞這一點,你可以檢查Karma和Testem誰是兩個瀏覽器測試亞軍(記住這裏摩卡獨自不會通過命令行運行瀏覽器測試)。

當您使用Backbone時,您可能會對Backbone-Boilerplate Karma + Grunt測試設置感興趣。在這裏看到更多:https://github.com/backbone-boilerplate/backbone-boilerplate

+0

忘記接受,但感謝您的幫助!我最終採納了使用PhantomJs進行瀏覽器測試的建議。 –

+0

與例如browserify或webpack,需要在瀏覽器中運行... –

+0

@JanusTroelsen這是不正確的。要求在瀏覽器中不起作用,webpack和browserify預編譯commonjs代碼以在瀏覽器內兼容。這是一個重要的區別。 –