【问题标题】:Object is not a Function - SuperTest对象不是函数 - SuperTest
【发布时间】:2015-07-08 07:12:41
【问题描述】:

我不确定它为什么会抛出这个错误以及它到底在说什么不是函数。

    'use strict';

  var koa = require("koa");
    var app = koa();
    var chai = require('chai');
    var expect = chai.expect;

    var request = require('supertest');

    describe('Feature: Car REST Endpoint', function () {

        context('Scenario: GET a Car', function () {

            var url = 'http://localhost/search/cars';

            describe('Given: the resource is accessed at the resource url' + url, function () {

                describe('Then: we receive a successful response', function(){

                    it('status code should be 200', function (done){
                        request(app)
                            .get(url)
                            .expect(200,done);
                    });
                });

它说是 .expect(200,done) 行,但我可能错了。

我也试过这个,但没有运气:

 request(app)
                    .get(url)
                    .expect(200)
                    .end(function(err, res){
                        if (err) return done(err);
                        done()
                    });

我也试过var request = require('supertest').agent(koa);

【问题讨论】:

  • 你能分享确切的错误信息吗?什么不是函数?您可以尝试使用 console.log 或调试来获取对象返回的内容吗?
  • 我什至不确定我知道它在说什么对象。
  • 看起来响应是未定义的,当它试图读取响应的状态代码时,可能会在 expect(200) 行中检查...未定义的会有意义...我想要我的测试简单地失败,而不是抛出这样的巨大错误。当然那个端点还没有,我必须试驾它!但是,如果响应未定义,我的 BDD 测试应该会失败,而不是非常适合。
  • 您可以更进一步,设置 $DEBUG 环境变量 = *。这将向您展示更多正在发生的事情。我不能说只看调用堆栈会导致它抛出错误
  • 你在跟我开玩笑吗!哇!就是这样。我到底花了多少时间在这上面

标签: node.js koa supertest


【解决方案1】:

您的问题是您将http://localhost 传递给#get(url)。将 url 更改为 /search/cars。我有一个完整的复制品(使用快递)

var request = require('supertest'),
express = require('express');

var app = express();

app.get('/user', function(req, res) {
  res.send(200, {
    name: 'tobi'
  });
});

request(app)
  .get('http://localhost/user')
  .expect(200)
  .end(function(err) {
    if (err) throw err;
    console.log('Success!');
  });

输出:

    if (res.status !== status) {
           ^
TypeError: Cannot read property 'status' of undefined
    at Test.assert (C:\workspace\choose-your-own\node_modules\supertest\lib\test.js:202:12)
    at Server.assert (C:\workspace\choose-your-own\node_modules\supertest\lib\test.js:131:12)
    at Server.g (events.js:199:16)
    at Server.emit (events.js:104:17)
    at net.js:1392:10
    at process._tickCallback (node.js:355:11)

当我使用/user 时,我得到:

Success!

【讨论】:

  • 您是在所有测试中始终处理 end() 中的错误,还是只是在做(200,完成)?
  • 200,完成工作正常。没有必要让事情变得复杂。这一行:request = request('http://localhost:5555'); 是它让我点击的原因。我记得你的 localhost 声明,感觉不合适。
猜你喜欢
  • 1970-01-01
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
  • 2021-04-19
  • 2012-02-06
  • 2014-01-31
  • 2021-06-25
  • 2015-08-11
相关资源
最近更新 更多