【发布时间】:2014-01-22 23:08:36
【问题描述】:
最新更新
仍然找不到我的服务或工厂。
'use strict';
/* jasmine specs for controllers go here */
describe("Backpage Controller", function(){
describe('Root Ctrl', function() {
var scope, ctrl, myService;
beforeEach(module("backpageApp"));
beforeEach(inject(function(Data, $controller, $rootScope) {
myService = Data;
scope = $rootScope.$new();
ctrl = $controller("RootCtrl", {$scope:scope});
}));
it('should set the default value of orderProp model', function() {
expect(scope.orderProp).toBe('rent')
});
it('should create "listings" model with 10 listings', function() {
expect(myService.listings.length).toBe(10)
});
});
});
这是最新的错误。
Chrome 32.0.1700 (Mac OS X 10.8.4) Backpage Controller Root Ctrl should create "listings" model with 10 listings FAILED
TypeError: Cannot read property 'length' of undefined
at null.<anonymous> (/Users/judyngai/Desktop/Jan2014/newback/trynewversion/minibackpage/test/unit/controllersSpec.js:24:32)
Chrome 32.0.1700 (Mac OS X 10.8.4): Executed 2 of 2 (1 FAILED) (0.284 secs / 0.058 secs)
我的 services.js 文件包含这个,我正在使用 angular 种子项目。
angular.module('backpage.services', [])
.factory('Data', function($resource) {
return $resource('data/data.json');
});
我的 app.js 文件是这个
var backpageApp = angular.module('backpageApp', ['ui.router', 'ngResource', 'ngRoute','backpage.services', 'backpagecontrollers']);
我对 Angular js 很陌生。我正在尝试编写一个测试我的 RootCtrl 的 jasmin 规范。
我创建了一个在控制器之间共享的服务
angular.module('backpage.services', [])
.factory('Data', function($resource) {
return $resource('data/data.json');
});
我将上面的模块注入到我的应用程序级模块中。
RootCtrl 为其函数提供了一个“数据”参数,因此范围对象可以访问由 $resource 获取的共享 data.json。
我将此设置为根 Ctrl 中的数据
$scope.listings = Data.query();
现在我无法弄清楚如何将我创建的服务注入到我用 jasmin 编写的规范中。
我的 Jasmin 文件目前看起来像这样
describe("Backpage Controller", function(){
describe('Root Ctrl', function() {
var scope, ctrl;
beforeEach(module("backpageApp"));
var $injector = angular.injector(['backpageApp']);
var myService = $injector.get('backpage.services');
beforeEach(inject(function($controller, $httpBackend) {
scope = {};
ctrl = $controller("RootCtrl", {$scope:scope});
}));
it('should set the default value of orderProp model', function() {
expect(scope.orderProp).toBe('rent')
});
it('should create "listings" model with 10 listings', function() {
expect(myService.listings.length).toBe(10)
});
});
});
我目前在运行 jasmin 测试时遇到此错误
Chrome 32.0.1700 (Mac OS X 10.8.4) Backpage Controller Root Ctrl encountered a declaration exception FAILED
Error: [$injector:unpr] Unknown provider: backpage.servicesProvider <- backpage.services
我看过angular js官方文档上的测试示例,示例使用
$httpBackend
在 jasmin 代码中获取 json 文件,但 $httpBackend 文档说它与 $http 服务一起使用,但我正在使用资源。
data.json 还包含 10 个广告列表。
感谢任何帮助。
【问题讨论】:
标签: angularjs unit-testing jasmine