【问题标题】:Mocha Chai AssertionError: expected array to be a jsonMocha Chai AssertionError:预期数组是 json
【发布时间】:2019-01-23 16:22:50
【问题描述】:

1) 第一个测试套件用例运行良好,没有任何错误。

chai.request(app) .get('/api/courses') .end((err, res) => {
res.should.have.status(200);
res.body.should.be.a("json");
done(); });

2) 虽然说“AssertionError: expected [Array(3)] to be a json”,尽管没有任何改变。

describe("Courses", () => {
describe("GET /api/courses", () => {
    it("should get all the courses", (done) => {
        chai.request(app)
             .get('/api/courses')
             .end((err, res) => {
                 res.should.have.status(200);
                 res.body.should.be.a("json");
                 done();
              });
    })
}); 

});

我实际上只是插入了描述和它的功能,以提供有关测试的更多信息。

App.js

App.test.js

Image Example here

【问题讨论】:

  • 你能记录下 res 的样子以及是否设置了 err 吗?
  • 是的,我可以!看 res.body: [ { id: 1, name: 'course1' }, { id: 2, name: 'course2' }, { id: 3, name: 'course3' } ]
  • 在两个测试用例中都有。
  • 好的,你能为此建立一个独立的概念证明吗?因为如果您描述的行为实际上是这样发生的,这将是一个 chai 错误。
  • 我会添加项目的图片,就两个文件

标签: javascript node.js mocha.js tdd


【解决方案1】:

不管怎样,你想通过这个测试达到什么目的?

编辑:抱歉,我不希望将此作为答案发布。但是,虽然我已经在这里:

据我所知,chai 正在按预期工作,因为您收到的返回值实际上是一个数组,而不是 json(尽管 NodeJs 中的 json 文件可以是一个数组)。这就是测试失败的原因。如果要检查响应的实际标头,可以测试 res.headers。 为什么它在 mocha 测试之外工作我不能告诉你,但感觉它更像是一个显示而不是一个实际的错误,就像你如何实际测试断言是否得到正确验证一样?

【讨论】:

  • 应该是一个简单的测试,我正在研究如何使用Mocha Chai。我相信原因在它的描述中非常明确。
  • 测试路线等
  • 谢谢!我去看看。
【解决方案2】:

我认为我们无法使用该命令检查 body 是否为 json。

res.body.should.be.a("json"); // invalid

如果您查看chai documentationhere,您无法在a() 函数中指定json

您可以检查来自res.headers 的 json 的替代解决方案,也可以检查响应正文是否为数组,例如

chai
  .request(app)
  .get("/api/courses")
  .end((err, res) => {
    res.should.have.status(200);

    res.body.should.be.a('array'); 
    res.headers["content-type"].should.contains('application/json');

    done();
  });

希望对你有帮助

【讨论】:

  • @FabioQuintoMarsiaj 太棒了,很高兴它对你有用!
猜你喜欢
  • 2016-11-24
  • 2023-02-03
  • 1970-01-01
  • 1970-01-01
  • 2017-04-19
  • 1970-01-01
  • 2016-08-03
  • 1970-01-01
  • 2023-03-21
相关资源
最近更新 更多