Node.js,Express,Mocha,Zombie缺少绑定文件

时间:2016-07-28 03:47:21

标签: javascript node.js mocha zombie.js

我正在跟随由OReilly出版的Ethan Brown撰写的使用Node和Express的Web开发教程。在第五章中,Mocha与Zombie一起用于测试基本功能,但它不起作用,并且打印出以下内容。

vagrant@vagrant-ubuntu-trusty-64:/vagrant/meadowlark/site$ mocha -u tdd -R spec qa/tests-crosspage.js
/vagrant/meadowlark/site/node_modules/bindings/bindings.js:91
  throw err
  ^

Error: Could not locate the bindings file. Tried:
 → /vagrant/meadowlark/site/node_modules/contextify/build/contextify.node
 → /vagrant/meadowlark/site/node_modules/contextify/build/Debug/contextify.node
 → /vagrant/meadowlark/site/node_modules/contextify/build/Release/contextify.node
 → /vagrant/meadowlark/site/node_modules/contextify/out/Debug/contextify.node
 → /vagrant/meadowlark/site/node_modules/contextify/Debug/contextify.node
 → /vagrant/meadowlark/site/node_modules/contextify/out/Release/contextify.node
 → /vagrant/meadowlark/site/node_modules/contextify/Release/contextify.node
 → /vagrant/meadowlark/site/node_modules/contextify/build/default/contextify.node
 → /vagrant/meadowlark/site/node_modules/contextify/compiled/6.3.0/linux/x64/contextify.node
    at bindings (/vagrant/meadowlark/site/node_modules/bindings/bindings.js:88:9)
    at Object.<anonymous> (/vagrant/meadowlark/site/node_modules/contextify/lib/contextify.js:1:96)
    at Module._compile (module.js:541:32)
    at Object.Module._extensions..js (module.js:550:10)
    at Module.load (module.js:458:32)
    at tryModuleLoad (module.js:417:12)
    at Function.Module._load (module.js:409:3)
    at Module.require (module.js:468:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/vagrant/meadowlark/site/node_modules/jsdom/lib/jsdom/browser/index.js:17:21)
    at Module._compile (module.js:541:32)
    at Object.Module._extensions..js (module.js:550:10)
    at Module.load (module.js:458:32)
    at tryModuleLoad (module.js:417:12)
    at Function.Module._load (module.js:409:3)
    at Module.require (module.js:468:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/vagrant/meadowlark/site/node_modules/jsdom/lib/jsdom.js:13:43)
    at Module._compile (module.js:541:32)
    at Object.Module._extensions..js (module.js:550:10)
    at Module.load (module.js:458:32)
    at tryModuleLoad (module.js:417:12)
    at Function.Module._load (module.js:409:3)
    at Module.require (module.js:468:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/vagrant/meadowlark/site/node_modules/zombie/lib/zombie/resources.js:11:8)
    at Module._compile (module.js:541:32)
    at Object.Module._extensions..js (module.js:550:10)
    at Module.load (module.js:458:32)
    at tryModuleLoad (module.js:417:12)
    at Function.Module._load (module.js:409:3)
    at Module.require (module.js:468:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/vagrant/meadowlark/site/node_modules/zombie/lib/zombie/index.js:6:13)
    at Module._compile (module.js:541:32)
    at Object.Module._extensions..js (module.js:550:10)
    at Module.load (module.js:458:32)
    at tryModuleLoad (module.js:417:12)
    at Function.Module._load (module.js:409:3)
    at Module.require (module.js:468:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/vagrant/meadowlark/site/qa/tests-crosspage.js:1:77)
    at Module._compile (module.js:541:32)
    at Object.Module._extensions..js (module.js:550:10)
    at Module.load (module.js:458:32)
    at tryModuleLoad (module.js:417:12)
    at Function.Module._load (module.js:409:3)
    at Module.require (module.js:468:17)
    at require (internal/module.js:20:19)
    at /usr/lib/node_modules/mocha/lib/mocha.js:220:27
    at Array.forEach (native)
    at Mocha.loadFiles (/usr/lib/node_modules/mocha/lib/mocha.js:217:14)
    at Mocha.run (/usr/lib/node_modules/mocha/lib/mocha.js:469:10)
    at Object.<anonymous> (/usr/lib/node_modules/mocha/bin/_mocha:404:18)
    at Module._compile (module.js:541:32)
    at Object.Module._extensions..js (module.js:550:10)
    at Module.load (module.js:458:32)
    at tryModuleLoad (module.js:417:12)
    at Function.Module._load (module.js:409:3)
    at Module.runMain (module.js:575:10)
    at run (bootstrap_node.js:352:7)
    at startup (bootstrap_node.js:144:9)
    at bootstrap_node.js:467:3

根据书中的&#34;代码中的建议不起作用?&#34; github link的部分我已使用ch05文件夹中package.json中列出的版本重新安装了所有依赖项。仍有同样的问题,我决定实施下一个测试工作正常。

vagrant@vagrant-ubuntu-trusty-64:/vagrant/meadowlark/site$ mocha -u tdd -R spec qa/tests-unit.js 


  Fortune cookie tests
    ✓ getFortune() should return a fortune


  1 passing (16ms)

质量保证章节的下一部分涵盖了Grunt,由于同样的错误,我无法开始工作。我已经将Ethan的git repo克隆到一个单独的目录中,重新安装所有依赖项,运行服务器,运行测试并最终看到正确的Mocha输出。

我尝试在我的某些文件中使用diff来对抗Ethan,并且没有发现任何错误的罪魁祸首......只是编码风格的差异和尾随空格。

此处列出了可能导致问题的文件及其内容。
tests-crosspages.js

var Browser = require('zombie'),
        assert = require('chai').assert;

var browser;

suite('Cross-Page Tests', function(){

    setup(function(){
        browser = new Browser();
    });

    test('requesting a group rate quote from the hood river tour page ' +
            'should populate the referrer field', function(done){
        var referrer = 'http://localhost:3000/tours/hood-river';
        browser.visit(referrer, function(){
            browser.clickLink('.requestGroupRate', function(){
                assert(browser.field('referrer').value === referrer);
                done();
            });
        });
    });

    test('requesting a group rate from the oregon coast tour page should ' +
            'populate the referrer field', function(done){
        var referrer = 'http://localhost:3000/tours/oregon-coast';
        browser.visit(referrer, function(){
            browser.clickLink('.requestGroupRate', function(){
                assert(browser.field('referrer').value === referrer);
                done();
            });
        });
    });

    test('visiting the "request groupe rate" page directly should result ' +
            'in an empty referrer field', function(done){
        browser.visit('http://localhost:3000/tours/request-group-rate',
                function(){
            assert(browser.field('referrer').value === '');
            done();
        });
    });
});

meadowlark.js

var express = require('express');
var fortune = require('./lib/fortune.js');

var app = express();

// set up handlebars view engine
var handlebars = require('express3-handlebars').create({
    defaultLayout:'main',
    helpers: {
        section: function(name, options){
            if(!this._sections) this._sections = {};
            this._sections[name] = options.fn(this);
            return null;
        }
    }
});
app.engine('handlebars', handlebars.engine);
app.set('view engine', 'handlebars');

app.set('port', process.env.PORT || 3000);

app.use(express.static(__dirname + '/public'));

// set 'showTests' context property if the querystring contains test=1
app.use(function(req, res, next){
    res.locals.showTests = app.get('env') !== 'production' && 
        req.query.test === '1';
    next();
});

app.get('/', function(req, res){
    res.render('home');
});
app.get('/about', function(req, res){
    res.render('about', {
        fortune: fortune.getFortune(),
        pageTestScript: '/qa/tests-about.js'
    });
});
app.get('/tours/hood-river', function(req, res){
    res.render('tours/hood-river');
});
app.get('/tours/request-group-rate', function(req, res){
    res.render('tours/request-group-rate');
});
// custom 404 page
app.use(function(req, res, next){
    res.status(404);
    res.render('404');
});

// custom 500 page
app.use(function(err, req, res, next){
    console.error(err.stack);
    res.status(500);
    res.render('500');
});

app.listen(app.get('port'), function(){
    console.log( 'Express started on http://localhost:' +
        app.get('port') + '; press Ctrl-C to terminate.' );
});

0 个答案:

没有答案