2015-02-08 17 views
83

Tôi đang cố xác định một số điểm cuối và thực hiện kiểm tra bằng cách sử dụng nodejs. Trong server.js tôi có:Tham chiếuMỗi: mô tả không được xác định NodeJs

var express = require('express'); 
var func1 = require('./func1.js'); 
var port = 8080; 
var server = express(); 

server.configure(function(){ 
    server.use(express.bodyParser()); 
}); 

server.post('/testend/', func1.testend); 

và trong func1.js:

var testend = function(req, res) { 
      serialPort.write("1", function(err, results) { 
      serialPort.write("2" + "\n", function(err, results) { 
      }); 
     }); 
    }); 
    exports.testend = testend; 

Bây giờ trong test.js Tôi cố gắng để sử dụng thiết bị đầu cuối này:

var should = require('should'); 
var assert = require('assert'); 
var request = require('supertest'); 
var http = require('http'); 
var app = require('./../server.js'); 
var port = 8080; 

describe('Account', function() { 
     var url = "http://localhost:" + port.toString(); 
     it('test starts', function(done) { 
       request(url).post('/testend/') 
       // end handles the response 
       .end(function(err, res) { 
         if (err) { 
           throw err; 
         } 
         res.body.error.should.type('string'); 
         done(); 
       }); 
     }); 
}); 

Nhưng khi tôi chạy node test.js Tôi nhận này lỗi:

 
describe('Account', function() { 
^ 

ReferenceError: describe is not defined 
    at Object. (/test/test.js:9:1) 
    at Module._compile (module.js:456:26) 
    at Object.Module._extensions..js (module.js:474:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
    at Function.Module.runMain (module.js:497:10) 
    at startup (node.js:119:16) 
    at node.js:906:3 

Tôi làm cách nào để khắc phục sự cố?

+1

Bạn mong đợi gì về 'description()' và nó được định nghĩa ở đâu? Khi xem tệp test.js của bạn, không có ký hiệu 'mô tả' đang được định nghĩa ở đó. – jfriend00

+1

mô tả() là một phần của Jasmine. –

+0

Khoảng cách tài liệu dẫn đến câu hỏi này đã được khắc phục trong [Tháng 11 năm 2016] (https://github.com/mochajs/mocha/commit/57dfe4ff2d6da287593a8978c121df8db90a3e23), nhưng có lẽ chỉ mới đưa nó vào trang web gần đây với bản phát hành phiên bản 4.1. 0. – devius

Trả lời

121

Giả sử bạn đang thử nghiệm qua mocha, bạn phải chạy thử nghiệm của mình bằng cách sử dụng lệnh mocha thay vì thực thi node.

Vì vậy, nếu bạn chưa có, hãy đảm bảo bạn thực hiện npm install mocha -g. Sau đó, chỉ cần chạy mocha trong thư mục gốc của dự án của bạn.

+12

Điều gì xảy ra nếu tôi muốn thực hiện các chức năng mocha cho nút? – abhisekp

+7

Tài liệu mocha tại http://mochajs.org/ singularly không đề cập đến điều này ... –

+3

không cần cài đặt mocha toàn cầu, chỉ cần sử dụng '" test ":" ./node_modules/.bin/mocha -V "' trong phần script của package.json và cài đặt mocha là một phụ thuộc nhiều hơn –

33

Để chạy thử nghiệm với nút/NPM mà không cần cài Mocha trên toàn cầu, bạn có thể làm điều này:

• Cài đặt Mocha tại địa phương để dự án của bạn (npm install mocha --save-dev)

• Tùy chọn cài đặt một thư viện khẳng định (npm install chai --save-dev)

• Trong package.json của bạn, thêm một phần dành cho scripts và nhắm mục tiêu các mocha nhị phân

"scripts": { 
    "test": "node ./node_modules/mocha/bin/mocha" 
} 

• Đặt các file spec của bạn trong một thư mục có tên /test trong thư mục gốc của web site

• Trong file spec của bạn, nhập khẩu các thư viện khẳng định

var expect = require('chai').expect; 

• Bạn không cần phải nhập khẩu mocha, chạy mocha.setup, hoặc gọi mocha.run()

• Sau đó chạy kịch bản từ gốc dự án của bạn:

npm test 
+3

Trong dòng thử nghiệm của bạn, bạn không còn phải trỏ đến thư mục bin mocha, jus t đặt 'mocha', nó sẽ hoạt động. –

+0

Nếu bạn muốn lệnh này chạy tất cả các kiểm tra trong thư mục '/ test', bao gồm các thư mục con, sau đó đặt 'mocha --recursive' –

+0

@AdrianLynch: Đã hai năm, nhưng có gì đó khác hoặc thay đổi. Không có biggee, nhưng có lẽ nó sẽ giúp một ai đó. Tôi đang trên Windows 10 với Mocha 4.01 được cài đặt trên toàn cầu. Tôi phải trỏ đến mocha \ bin \ mocha, như ghi chú của cantera nói. – BaldEagle

9

Bạn cũng có thể làm như thế này:

var mocha = require('mocha') 
    var describe = mocha.describe 
    var it = mocha.it 
    var assert = require('chai').assert 

    describe('#indexOf()', function() { 
    it('should return -1 when not present', function() { 
     assert.equal([1,2,3].indexOf(4), -1) 
    }) 
    }) 

tham khảo: http://mochajs.org/#require

+0

Từ ref> Giao diện yêu cầu không thể chạy qua nút thực thi, và phải được chạy qua mocha. Câu hỏi đặt ra là hỏi về việc chạy qua nút. – eighteyes

+0

Tôi đang viết sau và có trải nghiệm khác. Trong trường hợp nó giúp ai đó ... Tôi đang ở trên Windows 10 với mocha 4,01 và chai 4.1.2 được cài đặt trên toàn cầu. Tôi không cần ba biến đầu tiên ở đây; Tôi cần thứ tư. @eighteyes: Tôi chưa tìm thấy cách chạy trực tiếp Mocha. Tôi đang chạy qua "nút <đường dẫn đầy đủ đến mocha \ bin \ mocha><đường dẫn tương đối đến tệp thử nghiệm>". – BaldEagle

0

OP hỏi về việc chạy từ node không phải từ mocha. Đây là trường hợp sử dụng rất phổ biến, xem Using Mocha Programatically

Đây là nội dung được mô tả và đưa vào thử nghiệm của tôi.

mocha.ui('bdd').run(function (failures) { 
    process.on('exit', function() { 
     process.exit(failures); 
    }); 
    }); 

Tôi đã thử tdd như trong tài liệu, nhưng điều đó không hoạt động, mặc dù đã hoạt động.

Các vấn đề liên quan