我正在尝试使用ember-app-kit中提供的api-stub进行测试。
当我在浏览器中查看网站时,以及通过在浏览器中访问/tests
来运行测试时,存根正常工作。
但是,当我使用testem从命令行运行测试时(通过运行grunt test:server
),测试失败,因为未返回存根数据。
您可以在此处找到一个演示问题的最小示例:https://github.com/tomclose/minimal_eak_test_stub_problem,使用最新版本的ember-app-kit创建。
我做错了什么?
答案 0 :(得分:2)
rstudner在irc上联系了我并帮助我解决了这个问题。基本思想是保持grunt server
运行并使用config/environments/test.js
配置测试api请求以命中此服务器。
这是有效的:
将app/adapters/application.js
更改为指向可配置的主机:
export default DS.RESTAdapter.extend({
namespace: 'api',
host: window.ENV.host
});
修改config/environments/test.js
以配置测试以点击运行为grunt server
的应用实例:
window.ENV.host = 'http://localhost:8000'
然后您遇到了CORS问题。要解决这些问题,请将依赖项"cors": "2.2.0",
添加到package.json
,然后运行npm install
。然后..
在第8行的tasks/express-server.js
中添加:
var cors = require('cors');
并在第25行添加:
app.use(cors());
您可以在https://github.com/tomclose/minimal_eak_test_stub_problem找到更新的工作版本。
rstudner还提到他实际上使用sinon.js
在100%的时间内伪造服务器(然后使用selenium进行一些全栈测试),而不是遵循这种方法。
答案 1 :(得分:1)
因为testem的东西在端口上运行(7239是吗?)你a)无法在同一个端口(已绑定)上运行apistub服务器。
因此,您必须运行正常的应用程序(端口8000),让testem在自己的端口上运行..并允许testem通过适配器中的'host'参数找到正确的主机:端口组合来实际获取数据
同样,添加cors()过滤器会使:8000测试服务器愿意将数据从端口7239上的某些东西发送回“跨域请求”
使用sinon是一种不同的情况(根本不想使用apistub)。我实际上决定不尝试使用apistub进行测试,但当然上述方法效果很好。