2

我正在尝试使用 ember-app-kit 中提供的 api-stubs 进行测试。

当我在浏览器中查看站点以及通过访问运行测试时,存根可以正常工作/tests在浏览器中访问运行测试时,存根可以正常工作。

但是,当我使用 testem 从命令行运行测试时(通过运行grunt test:server),测试失败,因为没有返回存根数据。

您可以在此处找到一个演示该问题的最小示例:https ://github.com/tomclose/minimal_eak_test_stub_problem ,由最新版本的 ember-app-kit 创建。

我究竟做错了什么?

4

2 回答 2

2

rstudner 在 irc 上联系了我并帮助我解决了这个问题。基本思想是保持grunt server运行并用于config/environments/test.js配置您的测试 api 请求以访问该服务器。

这是有效的:

  1. 更改app/adapters/application.js为指向可配置的主机:

    export default DS.RESTAdapter.extend({
      namespace: 'api',
      host: window.ENV.host
    });
    
  2. 编辑config/environments/test.js以配置测试以命中运行为的应用程序实例grunt server

    window.ENV.host = 'http://localhost:8000'
    
  3. 然后你会遇到 CORS 问题。要解决这些问题,请将依赖项添加"cors": "2.2.0",package.json然后运行npm install​​. 然后 ..

  4. tasks/express-server.js第 8 行添加:

    var cors = require('cors');
    

    并在第 25 行添加:

    app.use(cors());
    

您可以在https://github.com/tomclose/minimal_eak_test_stub_problem找到更新的工作版本。

rstudner 还提到,他实际上sinon.js100% 的时间使用伪造服务器(然后使用 selenium 进行一些全栈测试),而不是遵循这种方法。

于 2014-04-17T11:59:15.127 回答
1

因为 testem 的东西在端口上运行(是 7239 吗?)你 a) 不能在同一个端口上运行 apistub 服务器(已经绑定)。

因此,您必须运行普通应用程序(端口 8000),让 testem 在其自己的端口上运行......并允许 testem 通过适配器中的“主机”参数找到正确的主机:端口组合以实际获取数据。

同样,添加 cors() 过滤器将使 :8000 测试服务器愿意从端口 7239 上的某处将数据发送回“跨域请求”

sinon 的使用是另一种情况(根本不想使用 apistub)。我实际上决定不尝试使用 apistub 进行测试,但上述方法肯定效果很好。

于 2014-04-17T14:48:17.073 回答