0

我有一个简单的测试来调用 POST 请求测试的回调。从服务器日志可以看出,请求正在发出,但似乎停在那里。

我对使用节点进行工作/测试非常陌生,所以我很有可能错过了一些简单的东西。

更新:我添加了原始的咖啡脚本

更新:如果文件直接运行,则运行原始咖啡脚本有效jasmine-node foo/bar/users.spec.coffee --coffee,但在运行所有咖啡文件时失败jasmine-node foo/bar --coffee。我将 .coffee 文件转换为 .js (并保留在所有返回中)并看到完全相同的问题(如果我单独运行文件,则会运行回调,但当我全部运行时会失败)

# original coffeescript
assert  = require 'assert'
request = require 'request'

describe 'User API', ->

  describe 'Signup', ->

    url = 'http://localhost:3000/users'
    params = null

    beforeEach (done) ->
      params =
        url: url
        form:
          firstName:  'John'
          lastName:   'Smith'
          email:      'john@example.com'
          password:   'foobar'
          role:       'member'
      done()

    it 'returns a 200 OK on valid user signup', ->
      request.post params, (err, resp, body) ->
        console.log "***************"
        console.log "in the callback"
        console.log "***************"
        assert.equal resp.statusCode, '200'
        done()


// the converted js
var assert, request;

assert = require('assert');

request = require('request');

describe('User API', function() {
  return describe('Signup', function() {
    var params, url;
    url = 'http://localhost:3000/users';
    params = null;
    beforeEach(function(done) {
      params = {
        url: url,
        form: {
          firstName: 'John',
          lastName: 'Smith',
          email: 'john@example.com',
          password: 'foobar',
          role: 'member'
        }
      };
      return done();
    });
    return it('returns a 200 OK on valid user signup', function() {
      return request.post(params, function(err, resp, body) {
        console.log("***************");
        console.log("in the callback");
        console.log("***************");
        assert.equal(resp.statusCode, '200');
        return done();
      });
    });
  });
});
4

2 回答 2

0

你有两个return陈述在那里。你的函数在第一个函数执行后返回,所以后面的代码不会运行。

你可以摆脱它们:

var request = require('request');

describe('User API', function() {
    describe('Signup', function() {
        var url = 'http://localhost:3000/users';
        var params = null;

        beforeEach(function() {
            params = {
                url: url,
                form: {
                    firstName: 'John',
                    lastName: 'Smith',
                    email: 'john@example.com',
                    password: 'foobar',
                    role: 'member'
                }
            };
        });

        it('returns a 200 OK on valid user signup', function() {
            return request.post(params, function(err, resp, body) {
                expect(resp.statusCode).toEqual(200);
            });
        });
    });
});
于 2013-07-15T02:16:31.737 回答
0

我错过了传递给测试的 done 参数。

# bad
it 'returns a 200 OK on valid user signup', ->

# good
it 'returns a 200 OK on valid user signup', (done) ->
于 2013-07-21T07:26:08.993 回答