【问题标题】:Why isn’t this jasmine-node test failing?为什么这个 jasmine-node 测试没有失败?
【发布时间】:2013-12-03 21:53:36
【问题描述】:

我使用 Express.js 和 Jasmine-node 进行测试。这是我的服务器代码:

var express = require('express');
var app = express();

app.get('/', function (request, response) {
  response.send("Bonjour!");
});

module.exports = app;

这是测试:

var request = require('http');
var app = require('../src/app');
var server;

describe('textreader', function(){

  beforeEach(function(done){
    server = app.listen(3333, function (err, result) {
      if (err) {
        done(err);
      } else {
        done();
      }
    });
  });

  afterEach(function(){
    server.close();
  });

  it('responds to /', function(){
      request.get("http://localhost:3333", function(response){
        console.log(response.body);
        expect(response.body).toEqual('foo');
      });
  });

});

这是输出:

mike@sleepycat:~/projects/textreader☺  grunt
Running "jshint:files" (jshint) task
>> 3 files lint free.

Running "jasmine_node" task

textreader
    responds to /

Finished in 1.218 seconds
1 test, 0 assertions, 0 failures, 0 skipped

Done, without errors.

显然这个测试应该失败,因为服务器只能产生文本“Bonjour!”。 其次,console.log 根本不产生任何输出。

我需要怎么做才能让这个测试按预期失败?

【问题讨论】:

  • 请考虑否定标题;就目前而言,它最终是正确的,但令人困惑。
  • 它没有通过(或失败),它根本没有运行(“0 个断言”)。请参阅documentation 了解如何运行异步测试。

标签: javascript node.js express jasmine jasmine-node


【解决方案1】:

您的示例与描述异步测试的 jasmine-node 页面上的示例非常接近。

您需要添加done() 以让测试知道等待 500 毫秒(默认情况下)以等待事务完成(或改为显示超时错误)。您的代码将如下所示:

it('responds to /', function(){
      request.get("http://localhost:3333", function(response){
        console.log(response.body);
        expect(response.body).toEqual('foo');
        done();
      });
  });

【讨论】:

  • 另外,为了记录,事实证明响应没有方法“body”。我改用“请求”库,它似乎更好处理:npmjs.org/package/request
猜你喜欢
  • 2021-02-27
  • 1970-01-01
  • 2021-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多