【问题标题】:Unit testing angular $log with jasmine用茉莉花单元测试角度 $log
【发布时间】:2016-06-14 01:59:38
【问题描述】:

我在单元测试 $log 时遇到了一些挑战。

我想尝试一个简单的测试,该测试采用我注入和测试的值。我还没有将规范与一个宁静的电话联系起来。我正在使用角度模拟。这是我之前的每个陈述。我有通过角度模拟定义的模块。我一直在测试的一些内容来自这个博客 http://www.bradoncode.com/blog/2015/06/08/ngmock-fundamentals-log/.

在我的 devDependencies 中

"angular": "^1.5.0",
"angular-mocks": "^1.5.0",

我正在使用 gulp 来设置测试。

gulp.task('test:jasmine',  function (done) { // move to return async when execution metrics done

gulp.src('./Scripts/tests/modules/utility/services/ha-http.service.jasmine.test.js')
    .pipe(jasmine({
        verbose: true
    }))
    .on('error', gutil.log)
    .on('end', function () {
        console.log('jasmine end');
        done();
    });

});

所以我知道 angular 和 mocks 的版本是匹配的。

beforeEach(function () {

    angular.mock.module('ha.module.utility');

    angular.mock.inject(function ($httpBackend, haHttpService) {
        http = $httpBackend;
        service = haHttpService;
    });
});

beforeEach(inject(function (_$log_) {
    $log = _$log_;
}));

afterEach(function () {

    http.flush();
    http.verifyNoOutstandingExpectation();
    http.verifyNoOutstandingRequest();
});

测试本身只是确保我有 $log 工作。

it('should call logs', function () {
    $log.info('it worked');
    expect($log.info.logs).toContain(['it worked']);
});

但是我要回来了

ReferenceError: inject is not defined

************* 更新 ***********

我确实在模拟模块中设置了 $log

angular.mock.module('ha.module.utility', function ($provide) {
            $provide.decorator('$log', function ($delegate) {
                return $delegate;
            });

        });



angular.mock.inject(function ($httpBackend, haHttpService, $log) {
            http = $httpBackend;
            service = haHttpService;
            console.log($log);
        });

当我运行 gulp 测试时,我在 console.log($log) 中得到了我想要的输出。但是,$log 仍然返回

ReferenceError: $log is not defined 

在规范中。

【问题讨论】:

  • 这是完整的文件吗?你定义了任何describe 函数吗?
  • 是的,我在描述服务 describe('haHttpService', function () {
  • 为了节省空间,我省略了一些其他测试

标签: angularjs unit-testing


【解决方案1】:

ReferenceError: 未定义注入

意味着inject global 没有定义,字面意思。它是 angular-mocks.js 中的 defined on condition

问题是由测试设备而非规格引起的。 angular-mocks.js 可能没有加载,也可能在 之前 Jasmine 加载。

【讨论】:

  • 这是我最初关心的问题,但我通过节点加载了所有这些,客户端没有脚本标签。一切都通过 npm 完成。
  • NPM 将“angular”和“angular-mocks”包获取到 node_modules,仅此而已,与它们的加载无关。您尚未提供有关如何运行测试的详细信息,但您应该调查您的测试设备(Karma 驱动的或其他任何东西)是否正确加载“angular”和“angular-mocks”。
  • 这只是我学习测试的基础。我正在通过 gulp 运行所有内容。我用 jsdom 设置了一个配置文件。
猜你喜欢
  • 2020-08-19
  • 2017-05-02
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 2017-09-27
  • 1970-01-01
相关资源
最近更新 更多