单元测试Express控制器

时间:2014-02-01 14:43:03

标签: node.js unit-testing express

我在使用Express在多个方面进行单元测试时遇到了麻烦,似乎缺乏关于它的文档和一般信息。

到目前为止,我发现我可以使用名为supertest(https://github.com/visionmedia/superagent)的库来测试我的路线,但是如果我打破了我的路线和控制器怎么办,我怎么能独立于他们的路径和控制器进行测试呢?路由。

这是我的测试:

describe("Products Controller", function() {
    it("should add a new product to the mongo database", function(next) {
        var ProductController = require('../../controllers/products');
        var Product = require('../../models/product.js');

        var req = { 
            params: {
                name: 'Coolest Product Ever',
                description: 'A very nice product'
            } 
        };

        ProductController.create(req, res);

    });
});

req很容易进行模型化。 res不是那么多,我试着抓住express.response,希望我能注入它,但这没有用。有没有办法模拟res.send对象?或者我对此采取了错误的方式?

1 个答案:

答案 0 :(得分:0)

当您测试路线时,您实际上并未使用内置功能。比方说,ProductController.create(req,res);

您基本上需要做的是,在端口上运行服务器并发送每个URL的请求。正如您提到的那样,您可以遵循此代码。

describe("Products Controller", function() {
    it("should add a new product to the mongo database", function(next) {
        const request = require('superagent');
        request.post('http://localhost/yourURL/products')
            .query({ name: 'Coolest Product Ever', description: 'A very nice product' })
            .set('Accept', 'application/json')
            .end(function(err, res){
                if (err || !res.ok) {
                    alert('Oh no! error');
                } else {
                    alert('yay got ' + JSON.stringify(res.body));
                }
       });
    });
});

您可以参考超级请求示例here