我正在关注AngularJS Tutorial。因为我想学习在ASP.NET项目中使用Angular,所以我偏离了教程。我在编写单元测试时遇到问题。根据我的理解,AngularJS使用Jasmine进行单元测试。所以我拿出了用于Jasmine测试的标准HTML页面。
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Jasmine Spec Runner v2.1.3</title>
<link rel="stylesheet" type="text/css" href="~/Content/css/jasmine.css" />
<script src="~/Scripts/unittests/jasmine.js"></script>
<script src="~/Scripts/unittests/jasmine-html.js"></script>
<script src="~/Scripts/unittests/boot.js"></script>
<!-- include source files here... -->
@Styles.Render("~/SiteCSS")
@Scripts.Render("~/SiteScripts")
<!-- include spec files here... -->
<script src="~/Scripts/unittests/les1tests.js"></script>
</head>
<body>
</body>
</html>
但是,这在本教程的第2步中没有进行AngularJS测试:
describe('PhoneListCtrl', function () {
it('should create "phones" model with 3 phones', function () {
var scope = {},
ctrl = new PhoneListCtrl(scope);
expect(scope.phones.length).toBe(3);
});
});
哪个不行。我通过将angular-mocks.js添加到我的测试页面来修复它:
@Styles.Render("~/SiteCSS")
@Scripts.Render("~/SiteScripts")
<script src="~/Scripts/unittests/angular-mocks.js"></script>
第一次测试通过。然后我遇到了另一个问题。步骤3中的此测试不会运行:
describe('PhoneCat App', function () {
describe('Phone list view', function () {
beforeEach(function () {
browser.get('app/index.html');
});
it('should filter the phone list as a user types into the search box', function () {
var phoneList = element.all(by.repeater('phone in phones'));
var query = element(by.model('query'));
expect(phoneList.count()).toBe(3);
query.sendKeys('nexus');
expect(phoneList.count()).toBe(1);
query.clear();
query.sendKeys('motorola');
expect(phoneList.count()).toBe(2);
});
});
});
我得到一个“ReferenceError:浏览器未定义”错误。我看到的所有答案都涉及Karma testrunner,我没有使用。我究竟做错了什么?如果我不想使用Karma,我该如何使这个测试工作?
答案 0 :(得分:1)
您会混淆单元测试,通常使用Karma运行,并由Web浏览器执行,使用Protractor API编写端到端测试。
量角器,端到端测试不在浏览器中运行。它们使用Jasmine API但由node.js执行。节点进程启动Web浏览器并使用Selenium与其进行通信,并作为真实用户在您的Web应用程序之前执行。