2015-05-05 15 views
7

Tôi đã viết một chức năng toàn cầu đòi hỏi phải có một số tập tin của ứng dụng của tôi/khung:công trình require.main.require nhưng không phải bên Mocha kiểm tra

global.coRequireModel = function(name) { 
    // CRASH happens here 
    return require.main.require('./api/_co' + name + '/_co' + name + '.model'); 
} 

Module này là trong/components/coGlobalFunctions.

Nó là cần thiết trong ứng dụng chính của tôi app.js như thế này:

require('./components/coGlobalFunctions'); 

Sau đó, trong các module khác sử dụng "cái gì đó" từ khuôn khổ tôi sử dụng:

var baseScheme = coRequireModel('Base'); 

này hoạt động nhưng không có trong các bài kiểm tra Mocha cung cấp cho tôi một "Lỗi: Không thể tìm thấy mô-đun" ngay trước cuộc gọi require.main.require.

Dường như thử nghiệm đến từ một thư mục nguồn khác. Nhưng tôi nghĩ rằng require.main.require sẽ đưa ra khía cạnh của việc phải tương đối liên kết với các mô-đun.

EDIT:

Một ví dụ tập tin thử nghiệm sống trong api/user:

var should = require('should'); 
var app = require('../../app'); 
var User = require('./user.model'); 
... 
+0

tìm thấy một workaround cho điều này? có thể đặt mô-đun trong thử nghiệm? – Chathushka

Trả lời

4

require.main điểm để các module đã được chạy trực tiếp từ nút. Vì vậy, nếu bạn chạy node app.js, thì require.main sẽ trỏ đến app.js. Mặt khác, nếu bạn chạy nó bằng cách sử dụng mocha, thì require.main sẽ trỏ đến mocha. Đây có thể là lý do tại sao các thử nghiệm của bạn không thành công.

Xem the node docs chi tiết hơn.

+0

Thực tiễn tốt nhất ở đây là gì? – Jonah

5

Vì require.main không phải là index.html trong ứng dụng nút-webkit của tôi khi chạy kiểm tra mocha, nó đã ném lỗi trái và phải về việc không thể giải quyết các mô-đun. Hacky sửa chữa trong helper.js thử nghiệm của tôi (yêu cầu điều đầu tiên trong tất cả các bài kiểm tra) cố định nó:

var path = require('path') 
require.main.require = function (name) { 
    // navigate to main directory 
    var newPath = path.join(__dirname, '../', name) 
    return require(newPath) 
} 

Điều này cảm thấy sai, mặc dù nó hoạt động. Có cách nào tốt hơn để sửa lỗi này không? Nó giống như kết hợp một số giải pháp trên với # 7 để kiểm tra mocha hoạt động, nhưng việc sửa đổi yêu cầu của chính chỉ để làm mọi thứ hoạt động khi thử nghiệm cảm thấy thực sự sai.

Đối-the tránh khác - ".." - giải pháp lộn xộn, xem tại đây: https://gist.github.com/branneman/8048520

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