2017-04-12 92 views
0

假设我有一个POST端点/user/:id,并且此端点在内部调用函数getUserData(id),然后将结果返回给调用者,调用者在返回输出之后JSON.stringify() ing。Mocha,Chai和Sinon:检查API的内部工作

现在,我需要确保至少调用一次getUserData(id)。当我使用chai-http向服务器发送邮件请求时,我该如何存根/窥探getUserData(id)函数?这是否是一个正确的方法?

+0

通常你只包括控制器一个单独的测试和间谍,存根和模拟的东西,所以你可以测试控制器。 API测试不那么复杂,您只需发送请求并针对结果运行测试。看一下官方文档,它应该提供足够的信息来编写测试。 – Gntem

回答

0

我将教程从https://scotch.io/tutorials/test-a-node-restful-api-with-mocha-and-chai调整为准系统servertest,您可以使用它来进行基本的API测试。

正如Mr.Phoenix所说,您不需要深入了解您的handler的实质,只需将一些数据传递给您的端点,并根据您的预期检查结果。

这里有2个文件,你可以用做这个测试:

index.js

const express = require('express') 
const app = express() 



app.get('/material',(req, res)=>{ 
    res.json([]) 
    //res.json(['stone', 'wood']) 
}) 

function getUserData(id){ 
    return 42 
} 

const port = 3031 

app.listen(port, function(err){ 
    console.log("Listening on port: " + port) 
}) 
module.exports = app 

test.js

process.env.NODE_ENV = 'test' 
// const Material = require('./materials') // conroller 
const chai = require('chai') 
const chaiHttp = require('chai-http') 
const server = require('./index') 
const should = chai.should() 


chai.use(chaiHttp) 



describe('/GET material',() => { 
    it('it should get all the materials', (done)=>{ 
    chai.request(server) 
    .get('/material') 
    .end((err, res) => { 
     res.should.have.status(200) 
     res.body.should.be.a('array') 
     res.body.length.should.be.eql(0) // start empty 
     done() 
    }) 
    }) 
}) 
+0

谢谢,但是如果我想要进入细节呢?我正在为控制器编写单独的测试,正如@Phoenix先生所建议的那样 –

相关问题