试图设置状态代码时,res.Status不是功能



在尝试满足提供的单位测试设置的规范时,尝试返回我被

击中的方法的状态代码时

typeerror:res.status不是函数

在API实现中运行函数创建器时。它发生在每个方法调用中,例如res.send,res.sendstatus等。即使我将res.status()添加到测试中以将其设置为在此处设置,也会返回相同的错误。

apitests.js

let chai = require('chai');
let expect = chai.expect;
let sinon = require('sinon');
let sinonChai = require('sinon-chai');
chai.use(sinonChai);
let model = require('../tron_model.js'); // for stubbing only
let api = require('../tron_api.js');
describe('API', function() {
    describe('creating users', function() {
        it('should return 201 on creating user', function () {
            let mockModel = sinon.stub(new model.TronModel());
            mockModel.addUser.onFirstCall().returns(new model.User('user','pass'));
            let req = {body: {username: 'goatzilla', password: 'x'}};
            let res = {end: function(){}};
            api.init(mockModel);
            api.createUser(req, res);
            expect(res.statusCode).to.equal(201);
            expect(mockModel.addUser).to.have.callCount(1);
        });
    });
});

tron_api.js

let model = undefined;
let api = exports;
api.init = function(modelArg) {
    model = modelArg;
};
api.createUser = function(req, res) {
    model.addUser(req.body.username, req.body.password);
    console.log(res);
    res.status(201);
};

您用此代码模拟了res对象:

let res = {end: function(){}};

没有.status()方法,然后将其传递给您期望调用res.status()api.createUser()函数(一种不在模拟对象上的方法)。模拟的对象将需要使用代码调用的所有方法。

此外,您还使用以下方式测试了属性res.statusCode

expect(res.statusCode).to.equal(201);

在模拟对象上也不存在。虽然res.status()是Express中的内置功能,但res.statusCode不是记录的属性(尽管确实存在)。

您可以将其添加到模拟的res对象中:

let res = {
    end: function(){}
    status: function(s) {this.statusCode = s; return this;}
};

要通过这两个测试。

最新更新