为什么我在测试中得到 "Ajax authorization fails"

Why do I get "Ajax authorization fails" in my tests

我正在学习 ember 教程,特别是我在学习 services

我 99.9% 确定我有正确的代码——我正在手工复制,因为我相信这有助于我更完整地吸收它,但如果有任何失败,我开始使用差异检查器来查看是否我打错了。据我所知,没有错别字。

我编写的应用程序的执行与教程中的屏幕截图相同,我得到的唯一错误是一个 lint 错误,因为测试中还没有断言。

在本单元之前,所有其他测试也已通过。但是现在我得到了以前通过的失败测试。它们似乎都源于对地图服务失败的存根调用。第一个失败的测试是 integration/component/rental-listing-test.js

hooks.beforeEach(function() {
  this.rental = {
    image: 'fake.png',
    title: 'test-title',
    owner: 'test-owner',
    type: 'test-type',
    city: 'test-city',
    bedrooms: 3
  };
});
test('should display rental details', async function(assert) {
  await render(hbs`{{rental-listing rental=rental}}`);
  assert.equal(this.element.querySelector('.listing h3').textContent.trim(), 'test-title', 'Title: test-title');
  assert.equal(this.element.querySelector('.listing .owner').textContent.trim(), 'Owner: test-owner', 'Owner: test-owner');
});

如果我从 rental-listing.hbs ( {{location-map location=rental.city}} ) 中删除新行,从而阻止使用地图,这些测试将再次通过(尽管使用该服务的组件的新测试有问题)。

所以要么我做错了我找不到的东西,要么 emberjs.com 的好人没有在本教程中提供完整的信息。我需要以某种方式存根地图服务吗?出现在 .hbs 文件中以使上述测试通过?如果是这样,您认为他们为什么没有提及这一点?

预计到达时间断言:

Ajax authorization failed                      @ 273 ms
Source: Error: Ajax authorization failed
  at new EmberError (http://localhost:7357/assets/vendor.js:13635:31)
  at new AjaxError (http://localhost:7357/assets/vendor.js:116954:13)
  at new UnauthorizedError (http://localhost:7357/assets/vendor.js:116968:13)
  at Class._createCorrectError (http://localhost:7357/assets/vendor.js:117533:25)
  at Class.handleResponse (http://localhost:7357/assets/vendor.js:117528:25)
  at Object.jqXHR.done.fail (http://localhost:7357/assets/vendor.js:117380:41)
  at fire (http://localhost:7357/assets/vendor.js:3609:31)
  at Object.fireWith [as rejectWith] (http://localhost:7357/assets/vendor.js:3739:7)
  at done (http://localhost:7357/assets/vendor.js:9648:14)
  at XMLHttpRequest.<anonymous> (http://localhost:7357/assets/vendor.js:9889:9)

所以终于有时间去看了。问题是这是为外部地图服务设置的,以使用环境变量作为 API 键。这就是为什么它可以很好地运行应用程序(我使用 KEY=value ember s 来启动应用程序)但测试却没有。只需使用 KEY=value ember t -s 即可使这些测试通过。我只剩下棉绒问题。

郑重声明,这是教程本身应该包含的内容,我不知道为什么我以前没有想到它。

您不需要 api 键来 运行 测试。您是否尝试过 super rentals repo 看它是否有同样的问题? https://github.com/ember-learn/super-rentals

如果它确实有同样的问题,我们可能需要 PR 修复教程。

更新

我看到有问题的集成测试缺少存根映射服务定义。它在租金回购中,但在指南教程中没有提到。参见 https://github.com/ember-learn/super-rentals/blob/master/tests/integration/components/rental-listing-test.js for the code. I've added this info to an issue for updating the guides: https://github.com/ember-learn/guides-source/issues/347