在ember应用工具包中使用testem运行测试时,api存根失败



我正试图利用ember应用工具包中提供的api存根进行测试。

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

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

您可以在这里找到一个演示该问题的最小示例:https://github.com/tomclose/minimal_eak_testrongtub_problem,从最新版本的ember应用工具包创建。

我做错了什么?

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_testrongtub_problem.

rstudner还提到,他实际上100%使用sinon.js来伪造服务器(然后在一些全栈测试中使用selenium),而不是遵循这种方法。

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

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

此外,cors()过滤器的添加将使:8000测试服务器愿意将数据从7239 端口发送回"跨域请求"

使用sinon是另一种情况(根本不想使用apistub)。事实上,我决定不尝试使用apistub进行测试,但上面的方法确实很有效。

相关内容

  • 没有找到相关文章

最新更新