【问题标题】:Dynamically load JSON for ngMock httpBackend response in Protractor在量角器中为 ngMock httpBackend 响应动态加载 JSON
【发布时间】:2015-08-05 01:35:27
【问题描述】:

我正在量角器测试中构建一个 ngMock httpBackend。

var mockJson = require(projectRoot + 'mock/load.json');

var mockResource = function() {
    angular.module('aMockObject', ['myApp', 'ngMockE2E'])
    .run(function($httpBackend) {
        $httpBackend.whenGET('a/path').respond(mockJson);
    });
};

模拟响应的默认 JSON 对象需要从文件中加载。

但是,$httpBackend 代码实际上是在浏览器上下文中执行的,而不是 Protractor 脚本上下文中,所以 mockJson 变量是未定义的。

还有其他方法可以使这项工作吗?我能想到的只是某种注入的脚本标签,用于在浏览器上下文中加载 json 文件。

【问题讨论】:

    标签: angularjs protractor ngmock ngmocke2e


    【解决方案1】:

    您可以使用addMockModule在量角器和您的应用程序之间传递数据:

    file.json

    {
        some_property: 'value'
    }
    

    aMockObject.js:

    exports.module = function (data) {
        angular.module('aMockObject', ['myApp', 'ngMockE2E'])
        .run(function($httpBackend) {
            $httpBackend.whenGET('a/path').respond(data);
        });
    };
    

    初始化函数:

    var aMockObject = require('aMockObject');    
    var file = require('file.json');    
    browser.addMockModule('aMockObject', aMockObject.module, file);
    

    【讨论】:

    • 非常简单。很惊讶我没有早点遇到这个解决方案。
    【解决方案2】:

    嗯,直接加载json就可以了。

    // Allow JSON
    $httpBackend.whenGET(/.*\.json$/).passThrough();
    
    $http.get('/path/to/file.json').success(function(json) {
      // other httpBackend code here
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-09
      • 1970-01-01
      • 2015-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多