ReferenceError: mô tả không được xác định NodeJs


160

Tôi đang cố gắng xác định một số điểm cuối và làm một bài kiểm tra bằng cách sử dụng nodejs. Trong server.jstôi có:

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ờ test.jstôi đang cố gắng sử dụng điểm 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.jstôi gặp lỗi này:

mô tả ('Tài khoản', hàm () {
^

ReferenceError: mô tả không được xác định
    tại đối tượng (/test/test.js:9:1)
    tại Module._compile (module.js: 456: 26)
    tại Object.Module._extensions..js (module.js: 474: 10)
    tại Module.load (module.js: 356: 32)
    tại Function.Module._load (module.js: 312: 12)
    tại Function.Module.runMain (module.js: 497: 10)
    khi khởi động (node.js: 119: 16)
    tại node.js: 906: 3

Làm thế nào tôi có thể khắc phục vấn đề?


1
Bạn mong đợi điều gì describe()và nó được định nghĩa ở đâu? Khi xem tệp test.js của bạn, không có ký hiệu describenào được xác định ở đó.
jfriend00

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

1
Khoảng cách tài liệu dẫn đến câu hỏi này đã được sửa vào tháng 11 năm 2016 , nhưng có lẽ chỉ xuất hiện trên trang web gần đây với việc phát hành phiên bản 4.1.0.
devius

Câu trả lời:


197

Giả sử bạn đang kiểm tra thông qua mocha, bạn phải chạy thử nghiệm bằng cách sử dụng mochalệnh thay vì nodethực thi.

Vì vậy, nếu bạn chưa có, hãy chắc chắn rằng bạn làm npm install mocha -g. Sau đó, chỉ cần chạy mochatrong thư mục gốc của dự án của bạn.


16
Điều gì xảy ra nếu tôi muốn làm cho các hàm mocha có sẵn cho nút?
abhisekp

12
Các tài liệu mocha tại mochajs.org đơn lẻ không đề cập đến điều này ...
Richard Ev

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 gói.json và cài đặt mocha như một phụ thuộc nữa
Lukas Liesis

2
@LukasLiesis không cần ./node_modules/.bin, đường dẫn này đã được tải khi bạn sử dụng npm runhoặc yarn, vì vậy chỉ cần "kiểm tra": "mocha -V" sẽ đủ
Felipe Sabino

@FelipeSabino cảm ơn bạn đã chỉ ra điều này nhưng khi bạn mocha -Vkhông rõ liệu nó được tải từ toàn cầu hay địa phương thì đó là lý do tại sao tôi vẫn thích hiển thị đường dẫn ngay cả khi hệ thống không yêu cầu
Lukas Liesis 10/03/2017

131

nếu bạn đang sử dụng vscode, muốn gỡ lỗi các tệp của bạn

Tôi đã sử dụng tddtrước đó, nó némReferenceError: describe is not defined

Nhưng, khi tôi sử dụng bdd, nó hoạt động!

lãng phí nửa ngày để giải quyết nó ....

    {
      "type": "node",
      "request": "launch",
      "name": "Mocha Tests",
      "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha",
      "args": [
        "-u",
        "bdd",// set to bdd, not tdd
        "--timeout",
        "999999",
        "--colors",
        "${workspaceFolder}/test/**/*.js"
      ],
      "internalConsoleOptions": "openOnSessionStart"
},

Ồ nhìn thấy điều này sau khi chỉ giải quyết vấn đề.
nonybrighto

Cảm ơn bạn! Tiết kiệm cho tôi rất nhiều thời gian!
Brad W

Điều này cũng đúng với WebStorm (thật lạ)
yentsun

4
Cảm ơn câu trả lời, làm cho mọi thứ hoạt động !! Làm thế nào điều này làm việc mặc dù? Làm thế nào để thay đổi tdd để bdd khắc phục vấn đề?
TedTran2019

6
bdd vs tdd là 'kiểu thử nghiệm' được truyền cho mocha thông qua các đối số lệnh, bdd là mặc định, nhưng mẫu tạo vscode sử dụng tdd. Bạn có thể đang sử dụng bdd, vì hầu hết các hướng dẫn bắt đầu sử dụng bdd. Tại sao vscode sử dụng tdd làm mặc định, khi bdd là mặc định, nằm ngoài tôi.
Ryan The Leach

47

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

• Cài đặt Mocha cục bộ cho dự án của bạn ( npm install mocha --save-dev)

• Tùy chọn cài đặt thư viện xác nhận ( npm install chai --save-dev)

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

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

• Đặt các tệp spec của bạn vào một thư mục có tên /testtrong thư mục gốc của bạn

• Trong tệp spec của bạn, nhập thư viện xác nhận

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

• Bạn không cần nhập mocha, chạy mocha.setuphoặc gọimocha.run()

• Sau đó chạy tập lệnh từ gốc dự án của bạn:

npm test

7
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, chỉ cần đặt mocha, nó sẽ hoạt động.
Adrian Lynch

1
Nếu bạn muốn lệnh này chạy tất cả các thử nghiệm trong thư mục '/ test', bao gồm các thư mục con, thì hãy đặtmocha --recursive
Luke Gallione

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

Để tôi làm việc, tôi phải bao gồm thư mục đích như thế này:{"scripts": { "test": "node ./node_modules/mocha/bin/mocha --recursive test" }}
Alwin Kesler

21

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


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 là hỏi về việc chạy qua nút.
tám

1
Tôi sẽ viết sau và có kinh nghiệm khác nhau. Trong trường hợp nó giúp được ai đó ... Tôi đang dùng 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 Mocha trực tiếp. 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

1
var mocha = require('mocha') var describe = mocha.describe var it = mocha.itĐiều này thực sự là dư thừa. Bạn có thể var {describe, it} = require('mocha')với phép gán hủy
ES6

6

tôi có lỗi này khi sử dụng "--ui tdd". loại bỏ điều này hoặc sử dụng vấn đề sửa lỗi "--ui bdd".


5

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

Đây là những gì tiêm mô tả và nó vào các thử nghiệm của tôi.

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

Tôi đã cố gắng tddnhư trong các tài liệu, nhưng điều đó không hiệu quả, mặc dù bdd đã làm việc.


Cảm ơn rât nhiều! Mặc dù tôi biết rằng describechỉ có sẵn với BDD và không có sẵn cho 'TDD', nhưng bằng cách nào đó trong tập lệnh thiết lập, tôi đã sử dụng TDD và cứ nghĩ rằng tôi đã định cấu hình là 'BDD'. Tìm kiếm trên Internet không giúp ích được gì, vì nhận thức của tôi là, tôi đã thiết lập đúng (BDD), nhưng tôi vẫn gặp lỗi. Đó chỉ là giải pháp của bạn, (duy nhất trong số các giải pháp khác được tìm thấy trên kết quả tìm kiếm trên Internet) khiến tôi thêm mã bổ sung vượt qua cài đặt sai của mình và cuối cùng đã hoạt động. Chỉ trong quá trình thiết lập cấu hình khác, tôi đã thấy lỗi đánh máy của mình và sau khi sửa nó thành 'BDD', mã trên không bắt buộc.
VanagaS
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.