gpt4 book ai didi

javascript - 在 CI 模式下运行时如何测试访问 ember-cli 服务器?

转载 作者:行者123 更新时间:2023-11-28 20:31:14 25 4
gpt4 key购买 nike

当通过访问 localhost:4200/tests 在浏览器中运行测试时,测试能够访问测试服务器 API。

但是,当以 CI 模式(使用 testem)运行测试时,他们无权访问测试服务器 API。

有什么办法可以做到这一点吗?


详细信息

在使用 ember-cli 生成的项目中,您可以扩展它运行的服务器(带有 Express 的 NodeJs)。请参阅 /server/index.js 中的说明。运行此命令后:

ember serve

... 此服务器在 localhost:4200 上提供内容。我这样做了,创建了一个服务器来响应浏览应用程序时在 localhost:4200/api 处提供的所有 API 请求。

当我访问 localhost:4200/tests 时,测试在浏览器中运行,它们能够访问这些 API,并且运行没有任何问题。

但是,当我终止服务器并在 CI 模式 (testem) 中运行测试时,使用以下命令:

ember test

...ember 应用程序使用 PhantomJs 在 headless 模式下运行,但该应用程序无法访问 API,导致大多数测试失败。

即使我在开始运行测试时让服务器保持运行,也会发生同样的事情。

我知道在测试中模拟 API 请求是惯例,起诉像 Sinon 或 mockjax 这样的东西。但是,这会重复我的测试服务器中已有的内容,我想避免这种情况。有没有办法让测试在 CI 模式下运行(使用 testem),并有权访问我的测试服务器?

最佳答案

这是可能的,但根据您的项目,它可能有点复杂。

您可以做的是在 ember 测试的同时运行 ember 服务器。然后您需要更改您的 ember 数据适配器和/或其他 AJAX 调用的主机设置(可能使其在 environment.js 中可配置)。

应用程序本身仍然由测试服务器提供服务,这使得 AJAX 调用跨域(因为端口不同,即使两者都作为本地主机访问)。

然后您需要在服务器上启用 CORS。有一个 npm 包 cors 可以用作 express 服务器中的中间件。

在简单的情况下,添加 CORS 中间件将开箱即用,但如果您在 AJAX 调用中使用身份验证或自定义 header ,则需要在客户端和服务器端进行更多配置。在这种情况下阅读 CORS。

这是我的做法。

app/adapters/application.js 中:

export default DS.RESTAdapter.extend({
namespace: "api",
host: Ember.ENV.serverURL || ""
});

server/index.js 中:

var express    = require('express');
// ...
var cors = require('cors');

module.exports = function(app) {
app.use(bodyParser());
app.use(cors());
// ...

关于javascript - 在 CI 模式下运行时如何测试访问 ember-cli 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24053248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com