egg-passport-github: 单元测试报 TypeError: this.req.isAuthenticated is not a function

i7uq4tfw  于 6个月前  发布在  Git
关注(0)|答案(2)|浏览(142)

What happens?

想在 egg-passport-xxx 单元测试里覆盖一个场景:如果 /passport/xxx/callback?code=xxx 被调用了,那么程序会去做一个登录验证。大概是这样写(以egg-passport-github举例说明):

it('should authenticate', () => {
    const ctx = app.mockContext({});

    app
      .httpRequest()
      .get('/passport/github/callback?code=1234')
      .expect(302);

    assert(ctx.isAuthenticated());
  });

看上去意图是正确的,但是跑起来会报错:

TypeError: this.req.isAuthenticated is not a function
      at Object.isAuthenticated (node_modules/egg-passport/app/extend/context.js:46:21)
      at Context.it (test/passport-github.test.js:61:16)
      at Test.Runnable.run (node_modules/co-mocha/lib/co-mocha.js:42:16)

这是因为用了 mock 的原因导致 request 对象不是真的 reqeust 吗?有没有大佬 给个测试 ctx.isAuthenticated 的思路? 多谢!

最小可复现仓库

请使用 npm init egg --type=simple bug 创建,并上传到你的 GitHub 仓库
https://github.com/Jeff-Tian/egg-passport-github

复现步骤,错误日志以及相关配置

git clone https://github.com/Jeff-Tian/egg-passport-github
cd egg-passport-github
npm i
npm test
ippsafx7

ippsafx71#

看到 egg-passport 源码里有:

app/extend/application.unittest.js 这个文件,mock 了 ctx.req.isAuthenticated 等方法,我先试试这个方案看。

zaqlnxep

zaqlnxep2#

在项目里添加了 application.unittest.js 这个文件,仍然不行,似乎无效……

相关问题