Type Error: res.status is not a function supertest
`TypeError: res.status is not a function
49 | })
50 | .catch(error => {
> 51 | return res.status(400).json({
| ^
52 | success: false,
53 | error,
54 | results: null
at status (Routes/Controllers/auth/index.js:51:18)`
router.post('/signup', (req, res) => {
let validate = ajv.compile(signupSchema);
let valid = validate(req.body);
if (!valid) {
return res.status(400).json({
success: false,
error: sumErrors(validate.errors),
results: null
});
}
auth
.signup(req.body)
.then(results => {
console.log(res.json);
return res.status(200).json({
success: true,
error: null,
results
});
})
.catch(error => {
return res.status(400).json({
success: false,
error,
results: null
});
});
});
Link to the project online-judge
When testing, with supertest this problem seems to exist.
But the same code works perfectly fine when I start the server manually using npm start and when requests are sent using postman.
Maybe you have to mock the response function.
One example:
beforeAll(async () => {
const res = jest.fn(() => {
status: jest.fn(() => {
send: jest.fn()
})
})
})
Maybe you have to mock the response function.
One example:
beforeAll(async () => { const res = jest.fn(() => { status: jest.fn(() => { send: jest.fn() }) }) })
But is'nt this supposed to work even without mocking.. I have the link for the project if u want online-judge
@NBNARADHYA are you still experiencing this issue? How exactly are you using supertest?
It happens when you try to test the express.Router() instance. Using express() instead of express.Router() solved my problem.
Can you explain why express() works differently from express.Router() when using supertest?